В процессе настройки WordPress на некоторых хостингах или при оптимизации производительности часто сталкиваются с необходимостью отключения встроенного планировщика задач WP-Cron. Для этого в wp-config.php добавляется константа DISABLE_WP_CRON со значением true. Однако после этого некоторые плагины перестают работать корректно, особенно те, что зависят от фоновых задач. В этой статье мы подробно разберём, почему это происходит и как решить проблему.
Что такое DISABLE_WP_CRON и зачем его использовать
WordPress использует систему планировщика задач WP-Cron для выполнения фоновых операций: обновления плагинов, публикации запланированных записей, отправки уведомлений и прочего. Однако WP-Cron запускается при каждом заходе на сайт, что приводит к нагрузке на сервер, особенно при высоком трафике.
Чтобы избежать постоянных запусков WP-Cron, администраторы часто отключают его с помощью константы:
define('DISABLE_WP_CRON', true);
После этого рекомендуется настроить системный cron на сервере, который запускает wp-cron.php по расписанию, например, каждые 15 минут. Это снижает нагрузку и улучшает производительность.
Почему плагины перестают работать при отключении WP-Cron
Многие плагины используют встроенный WP-Cron для выполнения своих задач: отправка писем, синхронизация, очистка базы данных и т.д. Когда WP-Cron отключён, эти задачи не выполняются автоматически. Если системный cron не настроен или настроен неправильно — плагин не получает вызовы своих фоновых функций.
Также встречаются плагины, которые полагаются на запуск WP-Cron при посещении сайта. При отключении WP-Cron они вообще перестают работать, если нет внешнего вызова планировщика.
Пример проблемы с плагином Clearfy Pro
Плагин оптимизации Clearfy Pro использует WP-Cron для планирования оптимизации базы и очистки кэша. С отключённым WP-Cron эти задачи не запускаются, и сайт начинает тормозить из-за накопления мусора.
Как правильно настроить WP-Cron при DISABLE_WP_CRON
Чтобы решить проблему, нужно отключить встроенный WP-Cron, но при этом обеспечить регулярный запуск wp-cron.php системным планировщиком:
- В
wp-config.phpдобавляем:define('DISABLE_WP_CRON', true); - Настраиваем системный cron на сервере (приведён пример для Linux):
*/15 * * * * wget -q -O - https://your-site.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Или с помощью curl:
*/15 * * * * curl https://your-site.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Это запустит WP-Cron каждые 15 минут. Интервал можно изменять в зависимости от потребностей сайта.
Проверка работы системного cron
Убедитесь, что cron-задание запустилось и выполняется. Для этого можно временно включить логирование в wp-config.php или добавить код для записи времени последнего запуска WP-Cron.
Как программно проверить и запустить WP-Cron из плагина
Если вы разрабатываете плагин для WordPress и хотите обеспечить совместимость с отключённым WP-Cron, можно добавить проверку и запуск задач вручную:
function wpcheck_run_cron_if_disabled() {
if ( defined('DISABLE_WP_CRON') && DISABLE_WP_CRON ) {
if ( ! wp_next_scheduled('wpcheck_custom_cron_hook') ) {
wp_schedule_event(time(), 'hourly', 'wpcheck_custom_cron_hook');
}
do_action('wpcheck_custom_cron_hook');
}
}
add_action('init', 'wpcheck_run_cron_if_disabled');
// Ваши функции, которые нужно запускать по крону
add_action('wpcheck_custom_cron_hook', 'wpcheck_custom_cron_tasks');
function wpcheck_custom_cron_tasks() {
// код задач плагина
}
Так вы обеспечите запуск важных задач напрямую, даже если WP-Cron отключён.
Альтернативы WP-Cron для сложных задач
Для сайтов с большим количеством фоновых процессов стоит рассмотреть более надёжные решения, чем WP-Cron:
- Системный cron с wp-cli: запуск скриптов через командную строку WordPress, что точнее и стабильнее.
- Плагины для очередей задач: например, Clearfy Pro имеет функции оптимизации, которые могут помочь снизить нагрузку.
- Использование внешних сервисов для планирования задач и вебхуков.
Выводы и рекомендации
Отключение WP-Cron через DISABLE_WP_CRON — это правильный шаг для оптимизации производительности, но требует грамотной настройки системного cron. Без этого многие плагины перестанут работать корректно, что негативно скажется на функционале сайта.
Обязательно настройте внешний cron-запуск wp-cron.php и проверьте, что задачи действительно выполняются. Если вы разрабатываете плагины, внедряйте проверку cron-состояния и возможность запуска задач вручную.
Для расширенной оптимизации можно использовать Clearfy Pro и другие инструменты из магазина WPSHOP.