wpcorp.ru wordpress WP Corp

Отключение и настройка автоматических очисток в WordPress

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

Что такое автоматические очистки (autoclean) в WordPress и почему их стоит контролировать

WordPress регулярно удаляет из базы данных некоторые данные, чтобы не допустить её разрастания и ухудшения производительности. Например, удаляются:

  • старые ревизии записей;
  • автоматические черновики;
  • спам и мусорные комментарии;
  • временные опции (transients);
  • автоматические задачи WP-Cron.

В большинстве случаев эти процессы полезны, но они могут мешать в следующих ситуациях:

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

Как отключить стандартные автоматические очистки в WordPress

Для отключения стандартных автоматических очисток мы можем использовать фильтры и хуки в WordPress. Например, чтобы отключить удаление устаревших ревизий и мусорных комментариев, можно добавить в файл functions.php вашей темы или в собственный плагин следующий код:

add_filter('wp_revisions_to_keep', 'wpcorp_disable_revisions', 10, 2);
function wpcorp_disable_revisions($num, $post) {
    // Отключаем ревизии, возвращая 0
    return 0;
}

add_action('wp_scheduled_delete', 'wpcorp_disable_scheduled_delete');
function wpcorp_disable_scheduled_delete() {
    // Отключаем автоматическое удаление мусорных комментариев и ревизий
    remove_action('wp_scheduled_delete', 'wp_scheduled_delete');
}

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

Удаление задач WP-Cron для автоматических очисток

Вы можете полностью отключить автоматическую задачу очистки wp_scheduled_delete следующим образом:

add_action('init', 'wpcorp_disable_wp_scheduled_delete');
function wpcorp_disable_wp_scheduled_delete() {
    if (wp_next_scheduled('wp_scheduled_delete')) {
        wp_clear_scheduled_hook('wp_scheduled_delete');
    }
}

Этот код удалит задачу из расписания WP-Cron, и очистка не будет запускаться автоматически.

Настройка собственного расписания и автоматических очисток

Если отключить стандартные автоматические очистки, то можно настроить собственные задачи, например, запускать очистку в менее загруженное время или по своему расписанию. Для этого:

  1. Создайте собственный крон-хук с нужным расписанием.
  2. Реализуйте функцию очистки с нужной логикой.
  3. Запланируйте событие с помощью wp_schedule_event.

Пример: запуск очистки устаревших ревизий и мусорных комментариев по понедельникам в 3 часа ночи.

add_action('wpcorp_weekly_cleanup', 'wpcorp_perform_cleanup');
function wpcorp_perform_cleanup() {
    global $wpdb;
    // Удаляем ревизии
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");

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

    // Удаляем устаревшие временные опции (transients)
    $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%'");
}

add_action('init', 'wpcorp_schedule_weekly_cleanup');
function wpcorp_schedule_weekly_cleanup() {
    if (!wp_next_scheduled('wpcorp_weekly_cleanup')) {
        wp_schedule_event(strtotime('next monday 3:00'), 'weekly', 'wpcorp_weekly_cleanup');
    }
}

Добавление пользовательского расписания WP-Cron

По умолчанию WordPress поддерживает расписания 'hourly', 'twicedaily' и 'daily'. Для более гибкой настройки можно добавить собственное расписание, например раз в две недели:

add_filter('cron_schedules', 'wpcorp_add_custom_cron_schedule');
function wpcorp_add_custom_cron_schedule($schedules) {
    $schedules['biweekly'] = [
        'interval' => 1209600, // 14 дней в секундах
        'display' => __('Раз в две недели')
    ];
    return $schedules;
}

После добавления нового расписания вы можете использовать его в wp_schedule_event.

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

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

  • WP-Optimize — популярный плагин для очистки базы данных, удаления ревизий, мусорных комментариев, оптимизации таблиц.
  • Advanced Database Cleaner — предлагает гибкие настройки автоматической очистки и оптимизации базы.
  • Clearfy Pro (https://wpshop.ru/plugins/clearfy-pro/?utm_source=wpcorp.ru&utm_medium=article&utm_campaign=udalit-avtomaticheskie-chistki-v-wordpress) — плагин для комплексной оптимизации и управления автоматическими процессами WordPress, включая очистку базы.

Использование таких плагинов позволяет настроить расписание и исключения без глубоких знаний программирования.

Практические рекомендации по контролю автоматических очисток

Для стабильной работы сайта и базы данных учитывайте следующие моменты:

  • Регулярно проверяйте нагрузку — если автоматические очистки вызывают пиковую нагрузку, перенастройте расписание или отключите их.
  • Используйте WP-Cron правильно — в случае высокого трафика и нестабильной работы WP-Cron рассмотрите альтернативы, например системный cron, и используйте функцию wpcorp_schedule_weekly_cleanup из примера.
  • Резервное копирование — перед изменениями в автоматических задачах делайте резервные копии базы данных.
  • Тестируйте на тестовом сайте — особенно если пишете собственный код для очисток.

Выводы и итоги

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

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙