Автоматическое создание резервных копий — одна из важнейших задач, которую должен решать каждый владелец сайта на 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.