Как настроить отложенный запуск задач в WordPress с помощью WP-Cron

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

Что такое WP-Cron и почему он важен для WordPress

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

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

Поэтому важно правильно настраивать WP-Cron и, при необходимости, заменять его системным cron для стабильности.

Как проверить, работает ли WP-Cron на вашем сайте

Для начала нужно убедиться, что WP-Cron вообще запускается. Самый простой способ — использовать плагин WP Crontrol. Он позволяет просматривать и управлять запланированными задачами прямо из админки WordPress.

Установите плагин, перейдите в Инструменты > Cron Events и посмотрите список задач. Если список пустой или задачи не выполняются, значит WP-Cron сработал неправильно.

Также можно вручную проверить выполнение задач через wp-cron.php, вызвав его в браузере:

https://ваш-сайт.ru/wp-cron.php?doing_wp_cron

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

Отключение встроенного WP-Cron и настройка системного cron

Чтобы избежать зависимостей от посещений сайта, лучше отключить встроенный WP-Cron и настроить системный cron на сервере.

Для отключения встроенного WP-Cron добавьте в wp-config.php следующую строку:

define('DISABLE_WP_CRON', true);

Далее нужно добавить задание в системный cron. Пример настройки для Linux-сервера:

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

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

Для пользователей хостинга Beget, Timeweb и др. есть веб-интерфейсы для настройки cron, где вы можете прописать аналогичное задание.

Пример создания собственной отложенной задачи с WP-Cron

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

Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:

function wpeducation_schedule_custom_event() {
    if (!wp_next_scheduled('wpeducation_custom_cron_event')) {
        wp_schedule_event(time(), 'hourly', 'wpeducation_custom_cron_event');
    }
}
add_action('wp', 'wpeducation_schedule_custom_event');

function wpeducation_custom_cron_function() {
    $log = WP_CONTENT_DIR . '/wpeducation-cron.log';
    $current_time = date('Y-m-d H:i:s');
    file_put_contents($log, "Custom WP-Cron event fired at: $current_time\n", FILE_APPEND);
}
add_action('wpeducation_custom_cron_event', 'wpeducation_custom_cron_function');

Объяснение:

  • wpeducation_schedule_custom_event — функция для регистрации задачи, которая будет запускаться каждый час.
  • wpeducation_custom_cron_function — функция, которая выполняется по расписанию и записывает время в лог.
  • Файл лога создается в директории wp-content.

Расширенные интервалы для WP-Cron

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

Добавим, например, интервал в 15 минут:

function wpeducation_custom_cron_schedules($schedules) {
    $schedules['every_fifteen_minutes'] = array(
        'interval' => 900, // 900 секунд = 15 минут
        'display' => __('Каждые 15 минут')
    );
    return $schedules;
}
add_filter('cron_schedules', 'wpeducation_custom_cron_schedules');

Теперь можно использовать этот интервал при планировании задач:

wp_schedule_event(time(), 'every_fifteen_minutes', 'wpeducation_custom_cron_event');

Типичные проблемы с WP-Cron и способы их решения

1. Задачи не выполняются — чаще всего связано с отключенным встроенным WP-Cron или отсутствием посещений сайта. Решение — настройка системного cron.

2. Множественные запуски одной задачи — если задача не удаляется после выполнения, она может дублироваться. Используйте wp_clear_scheduled_hook() для очистки.

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

Полезные плагины для работы с WP-Cron

  • WP Crontrol — управление cron задачами из админки.
  • Clearfy Pro — оптимизация и управление производительностью, в том числе CI cron задач.

Заключение

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

WP REST API: разрешение доступа для пользователей по ролям с примерами кода
14.04.2026
Изменение атрибута alt у изображений в WordPress: практические решения и примеры кода
29.11.2025
Как использовать AJAX в WordPress для динамического обновления контента
03.02.2026
Как автоматизировать удаление старого контента в WordPress
09.04.2026
Как изменить размер и оптимизировать изображения в WordPress: практические решения и примеры кода
24.12.2025