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

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

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

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

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

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

  • Файлы сайта: темы, плагины, медиафайлы, конфигурации.
  • База данных: все записи, страницы, настройки, пользователи и метаданные.

Для полноценного восстановления нужно сохранять и то, и другое.

Автоматизация бэкапа с помощью пользовательского кода

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

Для экспорта базы данных можно использовать встроенные функции PHP и WP-DB класса. Ниже пример функции wp_puzzle_create_db_backup(), которая создаёт дамп базы и сохраняет его в папку wp-content/backups:

function wp_puzzle_create_db_backup() {
    global $wpdb;
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if ( ! file_exists( $backup_dir ) ) {
        wp_mkdir_p( $backup_dir );
    }
    $filename = $backup_dir . '/db-backup-' . date('Y-m-d-H-i-s') . '.sql';

    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    $sql_dump = '';
    foreach ( $tables as $table ) {
        $table_name = $table[0];
        $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( function( $value ) use ( $wpdb ) {
                if ( is_null($value) ) return 'NULL';
                return "'" . esc_sql( $value ) . "'";
            }, array_values($row) );
            $sql_dump .= "INSERT INTO {$table_name} VALUES (" . implode( ',', $values ) . ");\n";
        }
        $sql_dump .= "\n\n";
    }

    file_put_contents( $filename, $sql_dump );
}

Эта функция экспортирует структуру и данные всех таблиц базы в SQL-файл с меткой времени.

Создание резервной копии файлов сайта

Для копирования файлов можно использовать стандартные PHP-функции, например, архивировать папку wp-content. Ниже пример функции wp_puzzle_backup_wp_content(), создающей ZIP-архив:

function wp_puzzle_backup_wp_content() {
    $zip = new ZipArchive();
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if ( ! file_exists( $backup_dir ) ) {
        wp_mkdir_p( $backup_dir );
    }
    $zip_file = $backup_dir . '/wp-content-backup-' . date('Y-m-d-H-i-s') . '.zip';

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

    $source = WP_CONTENT_DIR;

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

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

    $zip->close();
    return true;
}

Запуск автоматического бэкапа по расписанию

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

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

add_action( 'wp_puzzle_daily_backup', function() {
    wp_puzzle_create_db_backup();
    wp_puzzle_backup_wp_content();
});

Таким образом, бэкап будет создаваться ежедневно.

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

Если вы предпочитаете готовые решения, обратите внимание на следующие популярные плагины:

  • UpdraftPlus — мощный и удобный плагин, поддерживающий отложенное резервное копирование на облака (Google Drive, Dropbox, Amazon S3 и др.). Позволяет полностью автоматизировать процесс.
  • BackWPup — бесплатный и функциональный плагин с возможностью создания бэкапов базы, файлов и отправки их на удалённые хранилища.
  • WP-Optimize — кроме оптимизации базы данных, умеет создавать резервные копии и управлять ими.

Для интеграции с WPShop можно рассмотреть WPRemark — плагин с расширенными возможностями управления данными.

Лучшие практики при настройке резервного копирования

Чтобы автоматизация работала эффективно и безопасно, учитывайте следующие рекомендации:

  • Хранение копий: размещайте резервные копии не только на сервере сайта, но и на внешних сервисах или локальных устройствах.
  • Периодичность: выбирайте частоту бэкапов согласно активности сайта — для активных ресурсов лучше делать их ежедневно, для менее динамичных — раз в неделю.
  • Мониторинг: проверяйте работоспособность автоматизации и целостность копий, чтобы избежать сюрпризов при восстановлении.
  • Очистка старых бэкапов: чтобы не перегружать хранилище, реализуйте удаление устаревших резервных копий.

Пример удаления устаревших резервных копий

Добавим функцию wp_puzzle_cleanup_old_backups(), которая удаляет файлы старше 30 дней из папки бэкапов:

function wp_puzzle_cleanup_old_backups() {
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if ( ! file_exists( $backup_dir ) ) {
        return;
    }
    $files = glob($backup_dir . '/*');
    $now = time();
    foreach ($files as $file) {
        if (is_file($file) && ($now - filemtime($file)) > 30 * DAY_IN_SECONDS) {
            unlink($file);
        }
    }
}
add_action( 'wp_puzzle_daily_backup', 'wp_puzzle_cleanup_old_backups' );

Это позволит автоматически поддерживать порядок и экономить место.

Итоги

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматический редирект после удаления страницы в WordPress
09.04.2026
WooCommerce: автоматическое удаление товаров с нулевым остатком и управление запасами
15.05.2026
Создаем собственный виджет WordPress с применением классов и примерами кода
21.11.2025
Как настроить уникальные мета-данные для каждого типа записи в WordPress
06.01.2026
Автоматическое удаление старых записей через мета-данные в WordPress
12.03.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее