Как использовать WP-Cron для автоматического очищения базы данных WordPress

Диагностика проблемы: почему база данных WordPress нуждается в регулярной очистке

Со временем база данных WordPress накапливает множество ненужных записей: ревизии постов, автосохранения, спам-комментарии, устаревшие транзиенты и временные опции. Это замедляет работу сайта и увеличивает размер бэкапов. Ручная очистка возможна, но требует времени и навыков. Автоматизация процесса с помощью WP-Cron решает эту проблему.

Что такое WP-Cron и как он работает в WordPress

WP-Cron — это имитация системного cron, встроенная в WordPress. Она запускает задания по расписанию при заходе посетителей на сайт. WP-Cron не зависит от системного cron и подходит для большинства хостингов, где нет доступа к планировщику задач.

Пошаговое решение: настройка автоматической очистки базы данных с WP-Cron

1. Создаем функцию для очистки базы данных

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

function wptalk_cleanup_database() {
    global $wpdb;

    // Удаляем ревизии постов
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");

    // Удаляем спам-комментарии
    $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");

    // Удаляем устаревшие транзиенты
    $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'");

    // Удаляем транзиенты с истекшим сроком
    $time = time();
    $wpdb->query($wpdb->prepare(
        "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d",
        $time
    ));
}

2. Регистрируем кастомное событие WP-Cron

Зарегистрируем событие, которое будет запускать нашу функцию очистки, например, раз в сутки.

if (!wp_next_scheduled('wptalk_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wptalk_daily_cleanup');
}
add_action('wptalk_daily_cleanup', 'wptalk_cleanup_database');

3. Добавляем деактивацию расписания при отключении плагина

Если вы оформляете данный функционал в плагин, не забудьте очистить расписание:

register_deactivation_hook(__FILE__, function() {
    $timestamp = wp_next_scheduled('wptalk_daily_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wptalk_daily_cleanup');
    }
});

Проверка результата после внедрения

  • Подождите 24 часа или вручную запустите WP-Cron (через плагин WP Crontrol или запросом wp cron event run wptalk_daily_cleanup в WP-CLI).
  • Проверьте уменьшение количества ревизий в таблице wp_posts (запрос в phpMyAdmin: SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';) — должно быть 0.
  • Проверьте количество спам-комментариев (запрос: SELECT COUNT(*) FROM wp_comments WHERE comment_approved = 'spam';) — должно быть 0.
  • Сравните размер таблиц wp_options и wp_posts до и после очистки.

Частые ошибки и как их исправить

  • WP-Cron не запускается автоматически: на некоторых хостингах WP-Cron не срабатывает из-за низкой посещаемости сайта или блокировки вызова wp-cron.php. Проверьте логи, используйте системный cron для вызова wp-cron.php или запустите задания вручную через WP-CLI.
  • Ошибка доступа к базе данных: убедитесь, что у пользователя БД есть права на удаление записей. Проверяйте ошибки в debug.log.
  • Удаление не всех транзиентов: транзиенты хранятся в разных вариантах (с префиксами). Используйте правильные запросы и проверяйте таблицу wp_options.

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

  • Добавляйте логирование очистки через error_log() или записывайте в отдельный файл, чтобы отслеживать успешность выполнения.
  • Не удаляйте ревизии и данные, если сайт на стадии активной разработки — это может привести к потере данных.
  • Если сайт большой, разбивайте очистку на несколько частей, чтобы не перегружать сервер.
  • Для критичных проектов используйте плагин Clearfy Pro от WPShop — он умеет безопасно и удобно очищать базу и оптимизировать сайт без риска.

Сравнение вариантов очистки базы данных WordPress

МетодПреимуществаНедостатки
Ручной SQL-запросПолный контроль, быстроРиск ошибок, требует знаний SQL
WP-Cron с кастомным кодомАвтоматизация, гибкость, не требует плагиновНужно контролировать запуск WP-Cron, возможны сбои
Плагины (например, Clearfy Pro)Удобство, безопасность, дополнительные функцииЗависимость от стороннего кода, лицензии
Как добавить автоматические ответы на часто задаваемые вопросы в WordPress
16.01.2026
Как удалить пустые тексты и повторяющиеся посты в WordPress без плагинов
22.05.2026
Как отключить автоматическое обновление плагинов в WordPress
05.04.2026
Как отключить REST API в WordPress без плагинов
19.01.2026
Как создать собственный тип записи (Custom Post Type) в WordPress
07.02.2026