Как создать автоматический резервный копии WordPress с помощью кода

Автоматическое создание резервных копий — одна из важнейших задач, которую должен решать каждый владелец сайта на WordPress. Несмотря на большое количество плагинов для бэкапа, иногда хочется иметь собственное, прозрачное и легковесное решение без лишних зависимостей. В этой статье мы подробно разберём, как реализовать автоматическое создание резервных копий WordPress с помощью собственного кода, который можно добавить в functions.php вашей темы или оформить в виде простого плагина.

Почему важно делать резервные копии сайта WordPress

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

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

Основные компоненты резервной копии WordPress

Для полного восстановления сайта нужна копия файлов и базы данных:

  • Файлы сайта: ядро WP, темы, плагины, а также загруженные медиафайлы (папка wp-content/uploads).
  • База данных: все записи, настройки, пользовательские данные.

В нашем решении мы создадим архив с файлами и дамп базы данных в формате SQL.

Создание резервной копии базы данных

Для получения дампа базы данных можно использовать класс wpdb и функцию mysqldump из PHP. Обязательно учитывать безопасность, чтобы никто не мог вызвать бэкап извне.

Вот пример функции для создания дампа базы данных:

function wplog_create_db_backup() {
    global $wpdb;
    $db_name = DB_NAME;
    $db_user = DB_USER;
    $db_password = DB_PASSWORD;
    $db_host = DB_HOST;

    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }

    $file = $backup_dir . '/db-backup-' . date('Y-m-d-H-i-s') . '.sql';

    $command = "mysqldump --user={$db_user} --password={$db_password} --host={$db_host} {$db_name} > {$file}";
    system($command, $output);

    return file_exists($file) ? $file : false;
}

Эта функция создает в папке wp-content/backups SQL-файл с дампом базы данных. Для работы команды mysqldump должен быть доступ на сервере.

Архивирование файлов сайта

Для архивации файлов удобно использовать класс ZipArchive, встроенный в PHP. Мы создадим архив с темами, плагинами и папкой загрузок:

function wplog_create_files_backup() {
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $zip_file = $backup_dir . '/files-backup-' . date('Y-m-d-H-i-s') . '.zip';

    $zip = new ZipArchive();
    if ($zip->open($zip_file, ZipArchive::CREATE) !== true) {
        return false;
    }

    // Пути для архивации
    $paths = [
        WP_CONTENT_DIR . '/uploads',
        WP_CONTENT_DIR . '/themes',
        WP_CONTENT_DIR . '/plugins'
    ];

    foreach ($paths as $path) {
        $files = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($path),
            RecursiveIteratorIterator::LEAVES_ONLY
        );

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

    $zip->close();
    return file_exists($zip_file) ? $zip_file : false;
}

Этот код создает ZIP-архив с папками uploads, themes и plugins. Вы можете добавить или убрать пути по своему усмотрению.

Настройка автоматизации с помощью WP-Cron

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

function wplog_schedule_backup() {
    if (!wp_next_scheduled('wplog_daily_backup')) {
        wp_schedule_event(time(), 'daily', 'wplog_daily_backup');
    }
}
add_action('wp', 'wplog_schedule_backup');

function wplog_do_backup() {
    $db_backup = wplog_create_db_backup();
    $files_backup = wplog_create_files_backup();

    // Можно добавить логику отправки копий на email или удаленный сервер
}
add_action('wplog_daily_backup', 'wplog_do_backup');

Теперь WordPress будет ежедневно создавать резервные копии базы данных и файлов.

Отправка резервных копий на email или облако

Часто полезно не только создавать бэкапы локально, но и отправлять их на email или на облачные хранилища, например, Dropbox, Google Drive. Для отправки на email можно использовать встроенную функцию wp_mail:

function wplog_send_backup_email($file_path) {
    $to = get_option('admin_email');
    $subject = 'Резервная копия сайта WordPress';
    $message = 'Во вложении резервная копия сайта.';
    $attachments = [$file_path];
    wp_mail($to, $subject, $message, [], $attachments);
}

Вызывайте эту функцию после создания бэкапа, передавая путь к файлу. Для облачных хранилищ можно использовать их API и библиотеки.

Использование плагина Clearfy Pro для расширенного бэкапа

Если хочется более удобного и мощного решения без написания кода, рекомендую обратить внимание на Clearfy Pro. Этот плагин совмещает оптимизацию и инструменты для бэкапа с настройками автозапуска, хранения копий и уведомлениями.

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

1. Никогда не храните резервные копии в публично доступных папках без защиты. Лучше расположить их вне корня сайта или использовать .htaccess для ограничения доступа.

2. Регулярно проверяйте, что бэкапы создаются и файлы не повреждены.

3. Настройте удаленное хранение — на внешний сервер или облако. Это защитит от потери данных при проблемах с хостингом.

Итоги и рекомендации

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

Если хотите быстро и без кодирования получить надежный бэкап с удобными настройками, посмотрите Clearfy Pro.

Внутренняя переадресация в WordPress: как сделать без плагинов
03.12.2025
Как изменить главный заголовок страницы в WordPress без плагинов
20.12.2025
Добавление уникальных полей в формы WordPress: подробное руководство
28.01.2026
Как автоматически удалять неиспользуемые медиафайлы в WordPress
04.01.2026
Как использовать хуки в WordPress для автоматизации задач
21.11.2025