Как создать функцию автоматического резервного копирования в WordPress

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

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

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

На wpmanager.ru мы часто сталкиваемся с запросами, как именно реализовать стабильное резервное копирование при минимальных затратах ресурсов сервера, поэтому делимся проверенными практическими решениями.

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

Для полноценного бэкапа сайта важно сохранить две ключевые части:

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

Идеальный скрипт или плагин должен обеспечивать резервное копирование и того, и другого. Кроме того, желательно хранить бэкапы в удалённом хранилище, например, на Dropbox, Google Drive или Amazon S3, чтобы уберечь данные от потери при сбое сервера.

Как создать функцию автоматического резервного копирования базы данных WordPress

Для начала разберёмся, как программно сохранить копию базы данных. Мы напишем функцию wpmanager_backup_database(), которая экспортирует текущую базу в SQL-файл и сохраняет его в каталог wp-content/backups.

Для безопасности создайте папку backups с правами записи и запретом на выполнение файлов.

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

    $filename = $backup_dir . '/db-backup-' . $timestamp . '.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 .= "\nDROP TABLE IF EXISTS `$table_name`;\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(array($wpdb, 'escape'), array_values($row));
            $values = array_map(function($val) { return "'" . str_replace("'", "\\'", $val) . "'"; }, $values);
            $sql_dump .= "INSERT INTO `$table_name` VALUES(" . implode(',', $values) . ");\n";
        }
        $sql_dump .= "\n\n";
    }

    file_put_contents($filename, $sql_dump);
    return $filename;
}

Эта функция по шагам:

  • Получает список всех таблиц из базы.
  • Для каждой таблицы получает SQL для создания структуры.
  • Экспортирует все данные таблицы в INSERT-запросах.
  • Сохраняет результат в SQL-файл с отметкой времени.

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

Автоматизация запуска резервного копирования с помощью WP-Cron

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

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

function wpmanager_run_backup() {
    $backup_file = wpmanager_backup_database();
    // Здесь можно добавить отправку файла на почту или в облако
}
add_action('wpmanager_database_backup_event', 'wpmanager_run_backup');

Этот код:

  • Проверяет, запланирована ли ежедневная задача резервного копирования.
  • Если нет — ставит её в очередь.
  • Выполняет резервное копирование базы по событию.

Вы можете изменить интервал с daily на twicedaily или hourly по необходимости.

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

Резервное копирование только базы — недостаточно, так как важны также темы, плагины и загруженные медиафайлы. Для этого можно использовать PHP-функцию для архивирования каталога wp-content в ZIP-файл.

function wpmanager_backup_files() {
    $zip = new ZipArchive();
    $timestamp = date('Y-m-d-H-i-s');
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        wp_mkdir_p($backup_dir);
    }
    $zip_filename = $backup_dir . '/files-backup-' . $timestamp . '.zip';

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

    $rootPath = realpath(ABSPATH . 'wp-content');

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

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

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

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

Рекомендации по хранению и автоматическому удалению старых бэкапов

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

function wpmanager_cleanup_old_backups($days = 14) {
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!is_dir($backup_dir)) return;

    $files = glob($backup_dir . '/*');
    $now = time();

    foreach ($files as $file) {
        if (is_file($file)) {
            if ($now - filemtime($file) >= 60 * 60 * 24 * $days) {
                unlink($file);
            }
        }
    }
}

Запускайте эту функцию после создания нового бэкапа — так вы будете поддерживать хранилище в порядке.

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

UpdraftPlus

Самый популярный бесплатный плагин с возможностью автоматического резервного копирования базы и файлов. Поддерживает загрузку бэкапов на Dropbox, Google Drive, Amazon S3 и многие другие сервисы. Есть опция шифрования и планировщик.

WPvivid Backup

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

Clearfy Pro

Помимо оптимизации, в Clearfy Pro есть модуль для резервного копирования и восстановления данных, который можно интегрировать в процессы управления сайтом.

Как отправлять резервные копии на удалённые хранилища

Хранение бэкапов на том же сервере — рискованно. Чтобы повысить надёжность, полезно отправлять файлы в облако. Рассмотрим пример отправки SQL-резервной копии на Google Drive с помощью PHP-библиотеки Google API Client.

Для этого понадобится:

  • Создать проект и учётные данные в Google Cloud Console;
  • Установить библиотеку google/apiclient через Composer;
  • Настроить OAuth-авторизацию;
  • Вызвать загрузку файла после создания резервной копии.

Полный код реализации выходит за рамки статьи, но базу для интеграции можно взять в официальной документации Google: Google Drive API PHP Quickstart.

Заключение по созданию автоматического резервного копирования

Автоматическое резервное копирование — ключевой элемент безопасности любого сайта. Реализовав собственные функции, вы получите гибкий инструмент, который можно адаптировать под свои задачи и интегрировать с внешними сервисами. Для быстрого старта также можно использовать проверенные плагины из каталога WordPress, например, UpdraftPlus или Clearfy Pro.

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

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

⭐⭐⭐⭐⭐
Автоматическое удаление старых черновиков в WordPress для оптимизации базы данных
23.01.2026
Автоматическое изменение заголовков H1 в WordPress для улучшения SEO
08.03.2026
Автоматическое отключение нерабочих контейнеров в WordPress для повышения производительности
04.03.2026
Автоматическое управление переадресациями в WordPress по условиям с примерами кода
05.04.2026
Автоматическое управление ролями пользователей в WordPress с примерами кода
16.03.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше