Как создать автоматическое резервное копирование в WordPress без плагинов

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

Почему стоит создавать резервные копии вручную и без плагинов

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

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

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

Основные компоненты резервного копирования WordPress

Резервная копия WordPress должна включать два основных компонента:

  • Файлы сайта — все темы, плагины, загрузки и ядро WordPress;
  • Базу данных — все записи, настройки, комментарии и контент.

Каждый компонент требует индивидуального подхода для копирования и восстановления.

Копирование файлов сайта

Для копирования файлов можно воспользоваться PHP-функциями для архивации. В качестве примера можно использовать класс ZipArchive, который создаст ZIP-архив с нужными файлами.

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

Экспорт базы данных

Для создания дампа базы данных можно воспользоваться командой mysqldump, если у вас есть доступ к командной строке, либо создать SQL-дамп с помощью PHP, выполняя запросы и записывая результат.

Пример кода для создания резервного копирования файлов и базы данных

Ниже пример функции wordpressy_create_backup(), которая:

  • Создаёт ZIP-архив с файлами WordPress, исключая папки wp-content/cache и wp-content/uploads/cache;
  • Создаёт SQL-дамп базы данных;
  • Сохраняет оба файла в папку wp-content/backups.
function wordpressy_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');
    $zip_path = "$backup_dir/wordpress-files-$date.zip";
    $sql_path = "$backup_dir/wordpress-db-$date.sql";

    // Создаём ZIP архив с файлами
    $zip = new ZipArchive();
    if ($zip->open($zip_path, ZipArchive::CREATE) !== TRUE) {
        error_log('Не удалось создать архив: ' . $zip_path);
        return false;
    }

    $root = ABSPATH;
    $exclude = ['wp-content/cache', 'wp-content/uploads/cache', 'wp-content/backups'];

    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($root));
    foreach ($files as $file) {
        if (!$file->isFile()) continue;
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($root));

        $skip = false;
        foreach ($exclude as $excl) {
            if (strpos($relativePath, $excl) === 0) {
                $skip = true;
                break;
            }
        }
        if ($skip) continue;

        $zip->addFile($filePath, $relativePath);
    }
    $zip->close();

    // Создаём SQL дамп базы данных
    global $wpdb;
    $db_host = DB_HOST;
    $db_name = DB_NAME;
    $db_user = DB_USER;
    $db_password = DB_PASSWORD;

    $command = "mysqldump --user={$db_user} --password={$db_password} --host={$db_host} {$db_name} > {$sql_path}";
    exec($command, $output, $return_var);
    if ($return_var !== 0) {
        error_log('Ошибка создания дампа базы данных');
        return false;
    }

    return ['files_backup' => $zip_path, 'db_backup' => $sql_path];
}

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

Чтобы запускать резервное копирование регулярно, используйте WP-Cron. В файле functions.php вашей темы или в плагине добавьте следующий код:

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

add_action('wordpressy_daily_backup', function() {
    $result = wordpressy_create_backup();
    if ($result) {
        error_log('Резервная копия создана: ' . print_r($result, true));
    } else {
        error_log('Ошибка создания резервной копии');
    }
});

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

Отправка уведомлений о создании резервной копии

Чтобы всегда быть в курсе успешного создания бэкапа, можно отправлять уведомление на почту администратору:

add_action('wordpressy_daily_backup', function() {
    $result = wordpressy_create_backup();
    if ($result) {
        wp_mail(get_option('admin_email'), 'Резервная копия WordPress создана', 
            'Бэкап файлов: ' . $result['files_backup'] . "\n" . 'Бэкап базы: ' . $result['db_backup']);
    } else {
        wp_mail(get_option('admin_email'), 'Ошибка создания резервной копии WordPress', 'Проверьте логи сервера.');
    }
});

Полезные плагины для расширения функционала резервного копирования

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

  • Clearfy Pro — плагин для оптимизации и управления сайтом, включая настройки безопасности и бэкапов;
  • WPRemark — хотя основной функционал не про бэкапы, может помочь с отзывами и обратной связью после восстановления;
  • My Popup — для уведомлений посетителей, например, о технических работах во время восстановления.

Выводы и рекомендации

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

Не забывайте регулярно проверять бэкапы на целостность и возможность восстановления — это ключ к безопасности вашего сайта.

Как использовать WooCommerce хуки для автоматизации изменений в заказах
20.06.2026
Как автоматически удалять старые черновики в WordPress
09.04.2026
Как установить загружаемые изображения в WordPress для улучшения производительности
21.02.2026
Как разделить комментарии на страницы в WordPress для улучшения производительности и удобства
14.12.2025
Как избежать проблем с нерабочими изображениями после миграции WordPress
27.05.2026