Автоматическое создание резервных копий сайта на WordPress — одна из важнейших задач для любого владельца ресурса. В этой статье разберём, как с помощью стандартных возможностей WordPress и Cron можно настроить регулярное создание бэкапов без сторонних плагинов, а также приведём пример плагина для более удобного управления задачами резервного копирования и восстановления.
Почему важно автоматизировать создание резервных копий WordPress
Резервное копирование сайта защищает от потери данных из-за взлома, сбоя хостинга, ошибок при обновлении или других неожиданных проблем. Ручное создание бэкапов неудобно и требует постоянного внимания. Автоматизация позволяет не только регулярно сохранять копии базы данных и файлов сайта, но и экономит время.
WordPress не имеет встроенного механизма для создания полных резервных копий, но с помощью wp_schedule_event и системного Cron можно настроить запуск скриптов, которые будут сами делать архивы и сохранять их в безопасном месте.
Настройка Cron задачи для резервного копирования
Для начала создадим функцию, которая будет делать резервную копию базы данных и файлов темы, плагинов и загрузок. Разместим её в файле functions.php вашей темы или в отдельном плагине:
function wpcore_create_backup() {
global $wpdb;
$upload_dir = wp_upload_dir();
$backup_dir = WP_CONTENT_DIR . '/backups';
if ( !file_exists($backup_dir) ) {
mkdir($backup_dir, 0755, true);
}
// Резервная копия базы данных
$db_backup_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 . ' > ' . $db_backup_file;
system($command);
// Архив файлов wp-content (темы, плагины, загрузки)
$zip_file = $backup_dir . '/wp_content_backup_' . date('Y-m-d_H-i-s') . '.zip';
$zip = new ZipArchive();
if ($zip->open($zip_file, ZipArchive::CREATE) === TRUE) {
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(WP_CONTENT_DIR),
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();
}
}
Далее зарегистрируем Cron-событие, если оно ещё не добавлено:
function wpcore_register_backup_cron() {
if (!wp_next_scheduled('wpcore_daily_backup_event')) {
wp_schedule_event(time(), 'daily', 'wpcore_daily_backup_event');
}
}
add_action('wp', 'wpcore_register_backup_cron');
add_action('wpcore_daily_backup_event', 'wpcore_create_backup');
Этот код запускает функцию создания бэкапа один раз в сутки. При необходимости период можно изменить, зарегистрировав свою периодичность через фильтр cron_schedules.
Как добавить свою периодичность для Cron
Пример добавления запуска каждые 6 часов:
function wpcore_custom_cron_schedules($schedules) {
if (!isset($schedules['six_hours'])) {
$schedules['six_hours'] = array(
'interval' => 6 * 60 * 60,
'display' => __('Каждые 6 часов')
);
}
return $schedules;
}
add_filter('cron_schedules', 'wpcore_custom_cron_schedules');
// И затем при регистрации менять 'daily' на 'six_hours'
Использование плагина для управления резервными копиями
Если хочется проще и с графическим интерфейсом, можно использовать плагин Clearfy Pro, который умеет оптимизировать сайт и создавать резервные копии с гибкой настройкой расписания.
Clearfy Pro позволяет настроить хранение бэкапов на удалённые хранилища, включать/отключать архивирование файлов и базы данных, а также интегрируется с другими инструментами для безопасности.
Советы по хранению и безопасности резервных копий
Создавая резервные копии, очень важно не сохранять их в публично доступных папках сайта, чтобы избежать утечек данных. Рекомендуется либо хранить бэкапы за пределами директории WordPress, либо использовать защищённые каталоги.
Также желательно настроить автоматическую очистку старых бэкапов, чтобы не занимать лишнее место на сервере. Пример функции для удаления файлов старше 7 дней:
function wpcore_cleanup_old_backups() {
$backup_dir = WP_CONTENT_DIR . '/backups';
$files = glob($backup_dir . '/*');
$now = time();
foreach ($files as $file) {
if (is_file($file) && ($now - filemtime($file)) > 7 * 24 * 60 * 60) {
unlink($file);
}
}
}
// Можно добавить вызов в Cron вместе с бэкапом
add_action('wpcore_daily_backup_event', 'wpcore_cleanup_old_backups');
Отладка и проверка работы Cron задач
WordPress Cron зависит от посещений сайта, поэтому если трафик небольшой, задачи могут запускаться с задержками. Для решения можно настроить системный Cron на сервере, который обращается к файлу wp-cron.php с нужной периодичностью.
Пример команды для системного Cron (Linux):
*/30 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Также для отладки можно использовать плагин WP Crontrol, который позволяет просматривать, запускать и удалять Cron задачи прямо из админки.
Выводы
Автоматизация резервного копирования с помощью Cron — надёжное и гибкое решение, позволяющее защитить сайт WordPress от потери данных. Используя примеры кода из статьи, вы сможете настроить регулярный бэкап без лишних плагинов или же использовать готовые решения, например, Clearfy Pro для более удобного управления.