WP-Cron — это встроенная система планировщика задач в WordPress, которая отвечает за выполнение различных автоматических процессов: публикацию отложенных записей, проверку обновлений, очистку кэша и многое другое. Однако часто разработчики и владельцы сайтов сталкиваются с проблемой, когда WP-Cron не запускается или работает с перебоями. В этой статье мы подробно разберём причины возникновения ошибки и способы её решения с примерами кода и полезными плагинами.
Что такое WP-Cron и почему он может не работать
WP-Cron — это имитация системного cron, реализованная на уровне PHP скриптов WordPress. Он запускается при каждом заходе посетителя на сайт, проверяя, есть ли запланированные задачи. Если посещений мало или сервер настроен неправильно, WP-Cron может не запускаться вовремя или совсем перестать работать.
Основные причины неработающего WP-Cron:
- Отсутствие или низкая посещаемость сайта — задачи просто не активируются;
- Блокировка запросов к
wp-cron.phpна сервере или в файрволле; - Неправильно настроенные параметры в
wp-config.php; - Ошибка в сторонних плагинах, вызывающих сбой при выполнении задач;
- Использование внешнего системного cron без правильной настройки.
Как проверить, работает ли WP-Cron на вашем сайте
Для диагностики можно использовать несколько способов:
1. Проверка логов WP-Cron с помощью плагина WP Crontrol
Плагин WP Crontrol позволяет просматривать запланированные задачи, запускать их вручную и диагностировать проблемы.
Установите и активируйте плагин. В админке перейдите в Инструменты → Cron Events. Если список пустой или задачи не выполняются, значит WP-Cron не работает.
2. Проверка вызова wp-cron.php
Откройте в браузере URL https://ваш-сайт.ru/wp-cron.php?doing_wp_cron. Если страница возвращает ошибку или долго не отвечает, значит есть проблема с доступом к файлу.
3. Логирование ошибок WP-Cron
Добавьте в wp-config.php следующий код для включения дебага:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('DISABLE_WP_CRON', false);После этого ошибки будут записываться в файл wp-content/debug.log. Проверьте его на наличие ошибок, связанных с WP-Cron.
Как исправить ошибку WP-Cron не запускается: пошаговые решения
Шаг 1. Отключите встроенный WP-Cron и настройте системный cron
В случаях с низкой посещаемостью или когда сайт требует точного расписания, лучше использовать системный cron, который запускает wp-cron.php в заданное время.
Для этого в wp-config.php добавьте:
define('DISABLE_WP_CRON', true);Далее настройте cron на сервере, добавив задачу примерно такого вида:
* * * * * wget -q -O - "https://ваш-сайт.ru/wp-cron.php?doing_wp_cron" > /dev/null 2>&1Это будет запускать WP-Cron каждую минуту без зависимости от посещений.
Шаг 2. Проверьте доступ к wp-cron.php и настройки сервера
Убедитесь, что в файрволле, .htaccess или настройках сервера нет блокировок для wp-cron.php. Например, в .htaccess не должны быть правила, запрещающие доступ к этому файлу.
Пример разрешающего правила:
<Files wp-cron.php>
Require all granted
</Files>Шаг 3. Используйте плагин Clearfy Pro для оптимизации WP-Cron
Плагин Clearfy Pro включает настройки для управления WP-Cron, позволяя отключать лишние задачи и оптимизировать работу планировщика. Особенно полезен для сайтов с большим количеством плагинов и задач.
Шаг 4. Создайте собственную функцию для теста запуска WP-Cron
Для проверки, вызывается ли WP-Cron, можно добавить код, который будет логировать активацию хука:
add_action('wpse_wperror_cron_test', 'wperror_test_wp_cron');
function wperror_test_wp_cron() {
error_log('WP-Cron успешно сработал: ' . current_time('mysql'));
}
// Запланировать событие, если его нет
if (!wp_next_scheduled('wpse_wperror_cron_test')) {
wp_schedule_event(time(), 'hourly', 'wpse_wperror_cron_test');
}Этот код добавляет событие, которое ежечасно пишет в лог факт срабатывания WP-Cron. Если вы не видите записей в debug.log, значит задача не запускается.
Дополнительные советы и рекомендации при работе с WP-Cron
Оптимизация количества задач WP-Cron
Чрезмерное количество запланированных событий может замедлять сайт и вызывать сбои. Используйте плагин WP Crontrol для удаления ненужных задач или плагин Clearfy Pro для их отключения.
Мониторинг и уведомления
Для своевременного обнаружения проблем рекомендуем настроить уведомления о сбоях WP-Cron через плагины мониторинга или собственные скрипты отправки email при ошибках.
Правильное использование хуков и планировщика
При создании собственных задач используйте префиксы в названиях хук, чтобы избежать конфликтов, как показано в примере с wpse_wperror_cron_test. Это повысит стабильность и управляемость WP-Cron.