Как использовать WP-Cron для автоматизации задач в WordPress

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

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

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

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

Для надежной работы на сайтах с низкой посещаемостью рекомендуется отключить WP-Cron и настроить системный cron, который будет обращаться к wp-cron.php по расписанию.

Отличия WP-Cron от системного cron

  • WP-Cron запускается при посещении сайта, системный cron — по расписанию в системе.
  • WP-Cron проще настроить, не требует доступа к серверу.
  • WP-Cron может не сработать вовремя при низком трафике.

Как создать и зарегистрировать собственную задачу в WP-Cron

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

Первый шаг — зарегистрировать расписание, если стандартных интервалов недостаточно. Например, добавить интервал в 10 минут:

function wpfix_add_cron_interval($schedules) {
    if (!isset($schedules['every_ten_minutes'])) {
        $schedules['every_ten_minutes'] = array(
            'interval' => 600, // 600 секунд = 10 минут
            'display' => __('Каждые 10 минут')
        );
    }
    return $schedules;
}
add_filter('cron_schedules', 'wpfix_add_cron_interval');

Теперь нужно зарегистрировать саму задачу. Допустим, мы хотим каждые 10 минут очищать кэш или отправлять отчёт.

function wpfix_register_cron_event() {
    if (!wp_next_scheduled('wpfix_custom_cron_hook')) {
        wp_schedule_event(time(), 'every_ten_minutes', 'wpfix_custom_cron_hook');
    }
}
add_action('wp', 'wpfix_register_cron_event');

Далее создаём функцию, которая будет выполняться по событию:

function wpfix_custom_cron_function() {
    // Здесь ваш код для выполнения задачи
    error_log('WP-Cron задача выполнена: ' . date('Y-m-d H:i:s'));
}
add_action('wpfix_custom_cron_hook', 'wpfix_custom_cron_function');

Удаление задачи из расписания

Если задача больше не нужна, её можно отменить:

function wpfix_clear_cron_event() {
    $timestamp = wp_next_scheduled('wpfix_custom_cron_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpfix_custom_cron_hook');
    }
}
// Вызывать при деактивации плагина или вручную
// add_action('deactivate_my_plugin', 'wpfix_clear_cron_event');

Как проверить и отлаживать WP-Cron задачи

Проверка и отладка WP-Cron — важный этап, чтобы убедиться, что задачи работают корректно.

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

Также полезно выводить логи выполнения задач, например, через error_log() или записывать в отдельный файл.

Если WP-Cron не срабатывает, проверьте следующие моменты:

  • Не отключена ли константа DISABLE_WP_CRON в wp-config.php.
  • Есть ли посещения сайта — WP-Cron запускается при запросах.
  • Не блокирует ли сервер обращения к wp-cron.php.

Использование системного cron для надежного запуска WP-Cron

На некоторых сайтах с низкой посещаемостью рекомендуется отключить WP-Cron и настроить системный cron.

Для отключения добавьте в wp-config.php:

define('DISABLE_WP_CRON', true);

Далее в cPanel, SSH или другом интерфейсе сервера добавьте задачу:

*/15 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Это запустит обработку задач каждые 15 минут, независимо от посещаемости.

Примеры полезных задач для WP-Cron

WP-Cron можно использовать для множества задач:

  • Автоматическая очистка временных файлов и кэша.
  • Отправка регулярных email-рассылок или уведомлений.
  • Обновление данных из внешних API.
  • Создание резервных копий базы данных.
  • Удаление устаревших записей или черновиков.

Например, задача для удаления старых ревизий записей:

function wpfix_delete_old_revisions() {
    global $wpdb;
    $days = 30;
    $wpdb->query($wpdb->prepare(
        "DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_modified < NOW() - INTERVAL %d DAY",
        $days
    ));
}
add_action('wpfix_delete_old_revisions_hook', 'wpfix_delete_old_revisions');

if (!wp_next_scheduled('wpfix_delete_old_revisions_hook')) {
    wp_schedule_event(time(), 'daily', 'wpfix_delete_old_revisions_hook');
}

Заключение

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

Как автоматизировать удаление нерабочих ссылок в WordPress
09.01.2026
Как использовать хуки в WordPress для автоматизации задач
07.11.2025
WooCommerce: установка ограничений на количество товаров в корзине
30.04.2026
Как запретить доступ к файлам в WordPress через .htaccess
25.12.2025
Как использовать REST API в WordPress для автоматизации задач
30.11.2025