Как автоматизировать создание бэкапов в WordPress с помощью WP-Cron

Зачем нужна автоматизация создания резервных копий в WordPress

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

В WordPress для таких задач используется WP-Cron — встроенный механизм планировщика событий, позволяющий запускать задачи по расписанию без участия администратора.

В этом материале мы подробно разберём, как реализовать автоматическое создание бэкапов с помощью WP-Cron, а также рассмотрим примеры кода и полезные плагины для решения задачи.

Как работает WP-Cron и как его использовать для задач бэкапа

WP-Cron — это имитация системного cron, который запускается при посещении сайта. Он проверяет, есть ли запланированные события, и запускает их в нужное время.

Чтобы настроить автоматический бэкап, нужно:

  • Создать функцию, которая будет делать резервную копию — например, базы данных и важных директорий.
  • Зарегистрировать событие с помощью wp_schedule_event() с нужным интервалом.
  • Привязать вашу функцию к этому событию через add_action().

Далее рассмотрим пример реализации.

Пример кода: создание простой функции бэкапа и планировщика в WP-Cron

function wpapp_create_backup() {
    global $wpdb;
    $upload_dir = wp_upload_dir();
    $backup_dir = $upload_dir['basedir'] . '/wpapp-backups';
    if (!file_exists($backup_dir)) {
        wp_mkdir_p($backup_dir);
    }

    // Создаем дамп базы данных
    $filename = 'db-backup-' . date('Y-m-d-H-i-s') . '.sql';
    $filepath = $backup_dir . '/' . $filename;

    $command = sprintf(
        'mysqldump --user=%s --password=%s --host=%s %s > %s',
        DB_USER, DB_PASSWORD, DB_HOST, DB_NAME, escapeshellarg($filepath)
    );
    exec($command);

    // Дополнительно можно архивировать файлы сайта, если нужно
    // Например, wp-content/uploads
    $zip = new ZipArchive();
    $zipname = $backup_dir . '/uploads-backup-' . date('Y-m-d-H-i-s') . '.zip';
    if ($zip->open($zipname, ZipArchive::CREATE) === TRUE) {
        $path = $upload_dir['basedir'];
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
        foreach ($files as $file) {
            if (!$file->isDir()) {
                $filePath = $file->getRealPath();
                $relativePath = substr($filePath, strlen($path) + 1);
                $zip->addFile($filePath, $relativePath);
            }
        }
        $zip->close();
    }
}

// Регистрируем событие при активации плагина или темы
function wpapp_schedule_backup() {
    if (!wp_next_scheduled('wpapp_daily_backup_event')) {
        wp_schedule_event(time(), 'daily', 'wpapp_daily_backup_event');
    }
}
add_action('wp', 'wpapp_schedule_backup');

// Привязываем функцию к событию
add_action('wpapp_daily_backup_event', 'wpapp_create_backup');

// Очистка по деактивации
function wpapp_clear_scheduled_backup() {
    $timestamp = wp_next_scheduled('wpapp_daily_backup_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpapp_daily_backup_event');
    }
}

Этот код создает ежедневный бэкап базы данных и архивирует папку uploads. Важно, чтобы на сервере была доступна команда mysqldump и разрешены exec-вызовы.

Использование плагинов для автоматического бэкапа с WP-Cron

Если у вас нет возможности писать собственный код или хочется удобный интерфейс, рекомендуем плагины с поддержкой WP-Cron:

  • UpdraftPlus — популярный плагин с гибкой настройкой расписания, поддержкой облачных хранилищ и возможностью восстановления.
  • BackWPup — позволяет создавать задания по расписанию, экспортировать бэкапы в Dropbox, FTP, S3 и другие сервисы.
  • WPBackItUp — простой и эффективный плагин с основным функционалом автоматического сохранения.

В этих плагинах расписание запуска бэкапов строится на WP-Cron, что гарантирует регулярность при активном трафике.

Настройка UpdraftPlus для автоматического бэкапа

В админке WordPress перейдите в Настройки > UpdraftPlus Backups. В разделе «Настройка расписания» выберите желаемую периодичность для базы данных и файлов (например, ежедневно). Укажите место хранения (например, Dropbox или Google Drive).

Плагин будет автоматически запускать бэкапы по расписанию, используя WP-Cron. Это простой и надежный способ обеспечить регулярное резервное копирование без дополнительного кода.

Как улучшить надежность WP-Cron для задач бэкапа

WP-Cron срабатывает при посещении сайта, поэтому при низкой посещаемости задачи могут запускаться с задержкой.

Чтобы повысить надежность:

  • Настройте системный cron на сервере, чтобы вызывать wp-cron.php регулярно. Например, каждую пятиминутку:
wget -q -O - https://your-site.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
  • Отключите встроенный WP-Cron, добавив в wp-config.php строку define('DISABLE_WP_CRON', true);.
  • Используйте плагин Clearfy Pro, который оптимизирует работу WP-Cron и уменьшает нагрузки.

Так вы сделаете запуск бэкапов более точным и своевременным.

Резюме и советы по безопасности

Автоматизация бэкапов — обязательный элемент поддержки любого сайта на WordPress. С помощью WP-Cron можно реализовать гибкие задачи без нагрузки на сервер.

Но помните:

  • Храните бэкапы вне основного сервера — в облаках или на удаленных дисках.
  • Периодически проверяйте работоспособность восстановления из бэкапов.
  • Защищайте папки с бэкапами от публичного доступа через .htaccess или серверные правила.
  • Используйте проверенные плагины с хорошими отзывами и обновлениями.

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

Для удобства рекомендуем посмотреть плагин Clearfy Pro, который среди прочих функций помогает управлять WP-Cron и улучшать производительность сайта.

Наш каталог плагинов WordPress