WP-Cron не работает: как исправить проблему в WordPress

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

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

WP-Cron — это встроенная система планировщика задач в WordPress. В отличие от системных cron-задач на сервере, WP-Cron запускается при заходе посетителя на сайт: при каждом запросе проверяет, нет ли запланированных задач, и запускает их.

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

Признаки того, что WP-Cron не работает

  • Отложенные публикации не выходят в назначенное время.
  • Плагины, зависящие от расписания, не выполняют свои задачи (например, очистка кеша, отправка писем).
  • В логах сервера или плагина вы видите ошибки, связанные с wp-cron.php.

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

Как проверить, работает ли WP-Cron

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

add_action('wp_loaded', function() {
    if (defined('DOING_CRON') && DOING_CRON) {
        error_log('WP-Cron запущен: ' . current_time('mysql'));
    }
});

После этого посмотрите логи сервера. Если сообщений нет, значит WP-Cron не запускается вообще.

Также можно проверить, вызывается ли wp-cron.php напрямую. Для этого в браузере откройте https://ваш_сайт.ru/wp-cron.php?doing_wp_cron. Если вы видите белую страницу без ошибок — скорее всего, он работает, но не всегда запускается автоматически.

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

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

  1. Откройте wp-config.php и добавьте строку:
define('DISABLE_WP_CRON', true);
  1. Настройте системный cron, чтобы запускать wp-cron.php регулярно, например, каждые 15 минут:
*/15 * * * * wget -q -O - https://ваш_сайт.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&1
<

Или, если нет wget, можно использовать curl:

*/15 * * * * curl -s https://ваш_сайт.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&1
<

Это гарантирует запуск запланированных задач даже при отсутствии посетителей.

Пример функции для wpdemo, проверяющей статус WP-Cron

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

function wpdemo_check_wp_cron_last_run() {
    $cron = _get_cron_array();
    $last_run = 0;
    foreach ($cron as $timestamp => $events) {
        if ($timestamp > $last_run) {
            $last_run = $timestamp;
        }
    }
    $last_run_date = $last_run ? date('Y-m-d H:i:s', $last_run) : 'никогда';
    error_log('WP-Cron последний раз запускался: ' . $last_run_date);
}
add_action('init', 'wpdemo_check_wp_cron_last_run');

Это полезно для мониторинга работы планировщика.

Плагины для управления WP-Cron и диагностики

Существует несколько плагинов, которые помогут вам управлять WP-Cron и диагностировать проблемы:

  • WP Crontrol — позволяет просматривать, редактировать и запускать задачи cron прямо из админки WordPress. Очень удобно для отладки и управления расписаниями.
  • Advanced Cron Manager — более продвинутый инструмент с возможностью экспорта/импорта задач и детального анализа.
  • Cron Status — плагин для мониторинга статуса cron-задач и уведомлений.

Использование плагинов позволит избежать многих ошибок и упростить работу с WP-Cron.

Как использовать WP Crontrol для отладки

После установки WP Crontrol в меню «Инструменты» появится раздел «Cron Events». Там вы увидите все зарегистрированные задачи с их расписанием и временем следующего запуска. Можно вручную запустить любую задачу, чтобы проверить её работу.

Если задача не запускается, проверьте, не вызывает ли она ошибок. Для этого можно включить режим отладки в WordPress (define('WP_DEBUG', true);) и посмотреть логи.

Типичные ошибки и их решения

1. WP-Cron не запускается из-за блокировки внутренних запросов

Некоторые хостинги или плагины безопасности блокируют wp-cron.php или внутренние HTTP-запросы к самому сайту. Это приводит к тому, что WP-Cron просто не срабатывает.

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

2. Отложенные посты не публикуются

Часто проблема в том, что wp-cron.php не запускается из-за отсутствия трафика. Настройка системного cron решит проблему.

3. Ошибки в пользовательских cron-задачах

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

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

function wpdemo_custom_cron_function() {
    // Ваш код задачи
    error_log('Выполнена задача wpdemo_custom_cron_hook');
}
add_action('wpdemo_custom_cron_hook', 'wpdemo_custom_cron_function');

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

Выводы и рекомендации по работе с WP-Cron

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

Обязательно используйте плагины для контроля и отладки cron-задач, чтобы видеть, что происходит «под капотом».

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

Автоматическое удаление спама в комментариях WordPress: практические решения и примеры
18.12.2025
Как создать автоматическое сохранение поста через AJAX в WordPress
14.01.2026
Как создать и использовать кастомные таксономии в WordPress
05.01.2026
Как добавить автоматическое сохранение в формы WordPress для защиты данных
20.01.2026
WP-Cron не работает: как исправить проблему в WordPress
15.11.2025