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

Что такое WP-Cron и зачем автоматизировать очистку базы данных

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

Диагностика проблем с базой данных WordPress

Перед автоматизацией очистки полезно определить, насколько загружена база данных и какие типы данных занимают наибольший объём:

  • Подключитесь к базе через phpMyAdmin или Adminer.
  • Выполните запрос для подсчёта количества ревизий, спам-комментариев и транзиентов:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';
SELECT COUNT(*) FROM wp_comments WHERE comment_approved = 'spam';
SELECT COUNT(*) FROM wp_options WHERE option_name LIKE '_transient_%';

Если значения велики (например, тысячи ревизий или спама), имеет смысл настроить периодическую очистку.

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

1. Добавление функции очистки

Создайте функцию, которая удалит ревизии, спам-комментарии и просроченные транзиенты:

function wpmeta_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_value < UNIX_TIMESTAMP(NOW())");
}

2. Регистрация cron события

Добавьте код для регистрации собственного события, если оно ещё не зарегистрировано:

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

3. Привязка функции к событию

add_action( 'wpmeta_daily_cleanup', 'wpmeta_cleanup_database' );

4. Удаление задачи при деактивации

Важно очищать cron при деактивации плагина или темы, чтобы не оставлять мусор:

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

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

Чтобы убедиться, что очистка работает корректно:

  • Вручную вызовите функцию wpmeta_cleanup_database() через временный вызов или WP-CLI wp eval 'wpmeta_cleanup_database();'.
  • Проверьте количество ревизий и спам-комментариев в базе — они должны уменьшиться.
  • Наблюдайте в течение суток — запланированная задача должна сработать автоматически.
  • Для отладки можно добавить логирование в функцию, например, записывать время запуска в файл или опцию.

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

  • Задача не запускается автоматически: WP-Cron запускается только при посещении сайта. Для критичных задач подключите системный cron и вызов wp-cron.php напрямую.
  • Удаляются не те данные: всегда проверяйте SQL-запросы на тестовом сайте, чтобы не удалить важные записи.
  • Память или время выполнения превышены: разбейте очистку на части или используйте WP-CLI для запуска вне веб-сервера.
  • Неправильное удаление транзиентов: транзиенты хранятся в опциях с именами, начинающимися на _transient_, но время жизни хранится в отдельном ключе _transient_timeout_. Для корректной очистки используйте WP функции.

Практические советы по оптимизации и безопасности

  • Используйте WP функции delete_transient() для удаления транзиентов, чтобы избежать ошибок.
  • Для больших сайтов с высокой нагрузкой лучше запускать очистку в ночное время через системный cron.
  • Добавьте логирование ошибок и успешных запусков для мониторинга.
  • Регулярно оптимизируйте таблицы базы данных с помощью OPTIMIZE TABLE или плагинов, например Clearfy Pro (https://wpshop.ru/plugins/clearfy).

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

МетодПреимуществаНедостаткиПример использования
WP-Cron с кастомной функциейГибкость, не требует плагиновЗависит от посещаемости сайтаКод из статьи
Плагин для очистки базы (например WP-Optimize)Удобство, графический интерфейсДополнительная нагрузка, возможна избыточностьWP-Optimize, WP Rocket
Системный cron + WP-CLIНадёжность, не зависит от трафикаТребует доступа к серверуcron: 0 3 * * * wp cron event run --due-now
WordPress авторизация по телефону без пароля: настройка и лучшие плагины
16.03.2026
WooCommerce: как использовать webhook'и для автоматизации задач
30.05.2026
Как добавить владельца поста в REST API WordPress
30.01.2026
Как удалить записи по meta-полям в WordPress
09.04.2026
Как создать автоматический вывод оценок на основе WPMeta в WordPress
13.03.2026

Совсем скоро здесь откроется ресурс о вордпресс.