Автоматическое создание резервных копий WordPress с помощью PHP и плагинов

Резервное копирование — ключевой элемент поддержки любого сайта на WordPress. Особенно важно автоматизировать процесс, чтобы не зависеть от ручных процедур и иметь актуальную копию данных на случай сбоев, взломов или ошибок. В этой статье мы подробно разберём, как реализовать автоматическое создание бэкапов WordPress с помощью собственного PHP-кода, а также рассмотрим лучшие плагины, которые помогут упростить задачу.

Почему важно автоматизировать резервное копирование WordPress

Регулярные резервные копии сайта спасают от потери данных и помогут быстро восстановить работоспособность. Многие хостинги предлагают собственные решения, но они не всегда удобны или гибки. Автоматизация позволяет:

  • Не забывать делать бэкапы;
  • Сохранять копии по расписанию;
  • Сохранять все ключевые данные: файлы, базу данных, настройки;
  • Экономить время и силы администратора.

Понимание структуры WordPress и умение использовать PHP для создания бэкапов даст полный контроль над процессом и возможность кастомизации под любые требования.

Как работает резервное копирование WordPress

Для полноценного бэкапа нужно сохранить:

  • Все файлы WordPress, включая темы, плагины, загрузки;
  • Базу данных, где хранится весь контент, настройки и метаданные.

Самый простой способ — создать архив файлов и экспортировать базу данных в SQL-файл. Автоматизация состоит в том, чтобы этот процесс запускался по расписанию, например, с помощью wp-cron.

Создание простого скрипта автоматического бэкапа на PHP для WordPress

Ниже пример функции для wpfront, которая создаёт резервную копию базы данных и архива файлов, сохраняя их в папку wp-content/backups. Этот код можно добавить в файл functions.php вашей темы или создать отдельный плагин.

function wpfront_create_backup() {
    $upload_dir = wp_upload_dir();
    $backup_dir = WP_CONTENT_DIR . '/backups';

    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }

    // Создаём имя файла с датой
    $date = date('Y-m-d_H-i-s');
    $db_backup_file = $backup_dir . "/db_backup_{$date}.sql";
    $files_backup_file = $backup_dir . "/files_backup_{$date}.zip";

    // Резервное копирование базы данных
    global $wpdb;
    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    $sql_dump = '';

    foreach ($tables as $table) {
        $table_name = $table[0];

        // Создаём DROP TABLE
        $sql_dump .= "DROP TABLE IF EXISTS `$table_name`;\n";

        // Создаём CREATE TABLE
        $create_table = $wpdb->get_row("SHOW CREATE TABLE $table_name", ARRAY_N);
        $sql_dump .= $create_table[1] . ";\n\n";

        // Получаем данные
        $rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);

        foreach ($rows as $row) {
            $values = array_map('esc_sql', array_values($row));
            $values = array_map(function($value) { return is_null($value) ? 'NULL' : "'" . addslashes($value) . "'"; }, $values);
            $sql_dump .= "INSERT INTO `$table_name` VALUES (" . implode(',', $values) . ");\n";
        }

        $sql_dump .= "\n";
    }

    file_put_contents($db_backup_file, $sql_dump);

    // Создание архива файлов
    $zip = new ZipArchive();
    if ($zip->open($files_backup_file, ZipArchive::CREATE) === TRUE) {
        $rootPath = realpath(ABSPATH);

        $files = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($rootPath),
            RecursiveIteratorIterator::LEAVES_ONLY
        );

        foreach ($files as $name => $file) {
            if (!$file->isDir()) {
                $filePath = $file->getRealPath();
                $relativePath = substr($filePath, strlen($rootPath) + 1);

                // Исключаем папку backups чтобы не заархивировать бэкапы в себя
                if (strpos($relativePath, 'wp-content/backups') === false) {
                    $zip->addFile($filePath, $relativePath);
                }
            }
        }

        $zip->close();
    }
}

// Запускаем резервное копирование по расписанию
if (!wp_next_scheduled('wpfront_daily_backup')) {
    wp_schedule_event(time(), 'daily', 'wpfront_daily_backup');
}
add_action('wpfront_daily_backup', 'wpfront_create_backup');

Этот скрипт делает следующее:

  • Создаёт папку для бэкапов, если её нет;
  • Делает SQL-дамп всех таблиц базы данных;
  • Архивирует файлы сайта в ZIP, исключая папку с бэкапами;
  • Запускает задачу ежедневно с помощью wp-cron.

Использование плагинов для автоматического резервного копирования

Если не хочется писать код, можно использовать проверенные плагины. Вот несколько рекомендуемых решений:

1. UpdraftPlus

Один из самых популярных плагинов для резервного копирования. Позволяет делать бэкапы базы и файлов по расписанию, сохранять копии на облачные сервисы (Google Drive, Dropbox, Яндекс.Диск и др.). Имеет удобный интерфейс и множество настроек.

2. BackWPup

Ещё один мощный инструмент с поддержкой автоматического экспорта базы данных, файлов и отправкой архивов на FTP или облако. Бесплатная версия покрывает большинство задач.

3. WPvivid Backup

Простой в использовании плагин с функциями автоматического бэкапа, миграции сайта и восстановления. Позволяет планировать задачи и сохранять архивы локально или в облаке.

Все эти плагины можно скачать с wpshop.ru. Они регулярно обновляются и совместимы с последними версиями WordPress.

Как интегрировать автоматические бэкапы с отправкой на email или облако

Самые простые скрипты не умеют отправлять архивы автоматически. Для этого можно добавить следующий код, который будет отправлять SQL-дамп и ZIP архив на указанный email после создания бэкапа:

function wpfront_send_backup_email($db_file, $zip_file) {
    $to = 'your-email@example.com';
    $subject = 'Резервная копия сайта WordPress';
    $message = 'Во вложении резервные копии базы данных и файлов сайта.';
    $headers = array('Content-Type: text/html; charset=UTF-8');

    $attachments = array($db_file, $zip_file);

    wp_mail($to, $subject, $message, $headers, $attachments);
}

// Вызов после создания файлов
// wpfront_send_backup_email($db_backup_file, $files_backup_file);

Для автоматизации вызова этой функции добавьте вызов внутри функции wpfront_create_backup() после создания файлов.

Советы по безопасности и хранению бэкапов

При работе с резервными копиями важно учитывать безопасность:

  • Не храните бэкапы в папках, доступных из браузера — лучше в защищённых директориях или на внешних сервисах;
  • Шифруйте конфиденциальные данные, если планируете отправлять по email или сохранять в облаке;
  • Регулярно проверяйте, что бэкапы создаются корректно и файлы не повреждены;
  • Организуйте ротацию бэкапов — удаляйте старые копии, чтобы не занимать много места.

Выводы по автоматическому резервному копированию WordPress

Автоматизация бэкапов — обязательный шаг для надёжной работы сайта. Если вы готовы писать код, пример с PHP и wp-cron позволит гибко настроить процесс под свои задачи. Если хотите быстро и просто — выбирайте надёжные плагины, такие как UpdraftPlus или BackWPup. Главное — не забывайте регулярно проверять и тестировать восстановление, чтобы избежать неприятных сюрпризов.

Подробнее о плагинах и инструментах можно узнать на wpshop.ru.

Как автоматически отправлять email при изменении статуса заказа в WooCommerce
09.01.2026
Как удалить неиспользуемые поля в базе данных WordPress для оптимизации
18.02.2026
Оптимизация изображений в WordPress: улучшение скорости без потери качества
17.11.2025
Автоматизация создания и публикации контента в WordPress
29.11.2025
Как добавить пользовательские роли и права в WordPress без плагинов
13.01.2026