WP-Cron — встроенная система планировщика задач в WordPress, которая отвечает за выполнение отложенных и повторяющихся задач: публикация запланированных постов, очистка кэша, отправка email-рассылок и многое другое. По умолчанию WP-Cron запускается при каждом посещении сайта, что может приводить к задержкам и нагрузке на сервер, особенно на сайтах с высокой посещаемостью.
Почему стоит отключить автозапуск WP-Cron
Автоматический запуск WP-Cron при каждом запросе приводит к следующим проблемам:
- Повышенная нагрузка на сервер: при большом количестве посетителей WP-Cron срабатывает слишком часто, что замедляет работу сайта.
- Нестабильное выполнение задач: если на сайте мало посетителей, задачи могут не запускаться вовремя.
- Проблемы с производительностью: запуск WP-Cron вместе с основным запросом увеличивает время генерации страницы.
Поэтому на большинстве производственных сайтов рекомендуется отключить автозапуск WP-Cron и запускать задачи через системный cron.
Как отключить автозапуск WP-Cron через wp-config.php
Для начала нужно запретить выполнение WP-Cron при каждом запросе. Для этого добавьте в корневой файл wp-config.php следующую строку, желательно перед строкой /* That's all, stop editing! Happy publishing. */:
define('DISABLE_WP_CRON', true);Эта константа отключит автозапуск, но не сам механизм WP-Cron — задачи останутся, но их придется запускать вручную или через системный cron.
Настройка системного cron для запуска WP-Cron
Теперь нужно настроить системный cron, чтобы он запускал WP-Cron с нужным интервалом. Это позволит выполнять задачи WordPress независимо от посещаемости сайта.
Пример команды для cron
Откройте crontab пользователя, под которым работает ваш веб-сервер, командой:
crontab -eДобавьте строку, которая будет запускать скрипт WP-Cron каждые 15 минут:
*/15 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1<Или используя curl:
*/15 * * * * curl -s https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1Если доступ к команде wget или curl ограничен, можно запускать PHP напрямую:
*/15 * * * * php /путь/до/сайта/wp-cron.php >/dev/null 2>&1Убедитесь, что путь к PHP и к файлу wp-cron.php указан правильно.
Проверка работы системного cron
После настройки cron можно проверить логи сервера или установить плагин Clearfy Pro, который умеет мониторить задачи WP-Cron и выводить статус их выполнения.
Также можно добавить простой код для отладки в functions.php вашей темы:
function yelly_log_wp_cron() {
error_log('WP-Cron запущен: ' . current_time('mysql'));
}
add_action('wp_loaded', 'yelly_log_wp_cron');<Это позволит фиксировать в логах время запуска WP-Cron.
Дополнительные советы по оптимизации WP-Cron
Отключение ненужных задач
Иногда полезно отключить некоторые задачи, которые вы не используете, чтобы уменьшить нагрузку. Например, можно удалить задачи из очереди:
function yelly_clear_cron_jobs() {
$crons = _get_cron_array();
foreach ($crons as $timestamp => $cronhooks) {
foreach ($cronhooks as $hook => $events) {
if ($hook === 'wp_version_check' || $hook === 'some_other_hook') {
wp_clear_scheduled_hook($hook);
}
}
}
}
add_action('init', 'yelly_clear_cron_jobs');Использование плагина для управления WP-Cron
Для удобства можно использовать плагин Clearfy Pro, который позволяет управлять задачами WP-Cron, отключать ненужные и контролировать расписание.
Это особенно полезно на больших проектах с множеством отложенных задач.
Итоги
Отключение автозапуска WP-Cron и переход на системный cron — важный шаг для оптимизации производительности WordPress-сайта. Такой подход позволит избежать задержек при генерации страниц, повысит стабильность выполнения задач и снизит нагрузку на сервер.
Не забудьте после внесения изменений проверить работу отложенных задач и корректность cron-заданий.