WP-Cron
Что такое WP-Cron?
WP-Cron — это встроенный в ядро WordPress планировщик задач, который запускает отложенные и периодические события не по системному таймеру, а в момент загрузки страницы сайта.
Его ключевое отличие от настоящего cron-демона — отсутствие гарантии точного времени выполнения: задача срабатывает при первом же HTTP-запросе после наступления планового срока.
Как это работает?
WP-Cron при каждом обращении к сайту проверяет в таблице wp_options наличие событий с временем выполнения, меньшим или равным текущему серверному времени, и инициирует их обработку.
Запуск задач происходит через вызов wp-cron.php, который либо подключается в рамках текущего запроса, либо выполняется асинхронно через цикл HTTP-запроса самого к себе (loopback).
Все зарегистрированные события привязаны к хукам: разработчик вешает функцию на хук, а WP-Cron вызывает do_action() в момент активации хука по расписанию, передавая аргументы, сохранённые в настройках события.
Метрики и стандарты
- Допустимая задержка срабатывания: на сайтах с посещаемостью менее 100 уникальных посетителей в сутки фактическая задержка выполнения ежечасно запланированной задачи может достигать 3 часов, что признано критичным для любых операций, требующих своевременности.
- Порог замены на системный cron: индустриальным стандартом 2026 года является принудительное отключение WP-Cron и настройка серверного cron с интервалом не реже одного раза в 5 минут для задач с периодичностью менее 1 часа.
- Нагрузка на сервер: каждый вызов WP-Cron добавляет в среднем 50–150 мс к времени генерации страницы на хостингах без объектного кеша, а на посещаемых сайтах асинхронный цикл создаёт дополнительную нецелевую нагрузку в 0,5–2 % от общего числа HTTP-запросов.
- Максимальное количество зарегистрированных крон-событий: более 300 активных хуков начинают замедлять проверку очереди в wp_options, поэтому рекомендована периодическая очистка просроченных и неиспользуемых задач.
Почему это важно для бизнеса?
Точность срабатывания WP-Cron напрямую влияет на клиентский опыт: просроченная отправка email-уведомлений о заказе или сброс пароля приводит к жалобам, оттоку и снижению доверия к магазину.
Использование серверного cron для запуска импорта цен, публикации отложенных записей и обновления остатков гарантирует выполнение этих операций строго по расписанию независимо от трафика, что сохраняет конкурентоспособность и актуальность витрины.
Переход на системный cron также снижает нагрузку на сервер от паразитных HTTP-запросов loopback в моменты пиковой посещаемости, ускоряя отрисовку страниц для покупателей и улучшая поведенческие факторы SEO.
Пример применения
Интернет-магазин отправляет покупателям уведомление о смене статуса заказа по email. На этапе низкого сезона трафик падает до 40 посетителей в сутки, и письма уходят с опозданием до 2 часов после оплаты, вызывая обращения в поддержку.
Администратор отключает WP-Cron через константу DISABLE_WP_CRON в wp-config.php и создаёт задачу в панели хостинга, которая каждую минуту выполняет wget -q -O — https://site.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&1.
После этого все уведомления доставляются в течение 1–2 минут, а количество тикетов с претензией о задержке письма падает до нуля.
Как это реализуется в WordPress?
Управление зарегистрированными событиями и расписаниями выполняется через плагины WP Crontrol (просмотр, запуск, удаление хуков и добавление произвольных PHP-задач) и Advanced Cron Manager (визуальный интерфейс с логами выполнения).
Отключение встроенного WP-Cron производится добавлением define(‘DISABLE_WP_CRON’, true); в wp-config.php. После этого сайт больше не инициирует проверку событий самостоятельно.
Системный cron настраивается на сервере: либо HTTP-запрос к /wp-cron.php через wget или curl каждые 1–5 минут, либо более производительный вызов WP-CLI wp cron event run —due-now, который обрабатывает задачи без нагрузки на веб-сервер и без ограничений PHP на время выполнения.
На хостингах с панелью управления (cPanel, ISPmanager) задание добавляется в разделе «Cron-задачи»; на серверах под управлением LiteSpeed можно использовать встроенный механизм периодических заданий с вызовом CLI.
Все задачи WP-Cron логируются через WP_CRON_LOCK_TIMEOUT, и при использовании объектного кеша (Redis) блокировка не дублируется, что ускоряет выполнение очереди на высоконагруженных проектах.
Связанные понятия
- Системный cron (Server Cron) — классический планировщик задач операционной системы, запускающий скрипт строго по времени независимо от трафика сайта.
- Хук (Action Hook) — точка в коде WordPress, на которую подвешиваются функции; WP-Cron вызывает указанный хук в момент активации события.
- Расписание (Cron Schedule) — интервал повторения события, задаваемый через фильтр cron_schedules (стандартные: hourly, twicedaily, daily) или добавляемый разработчиком.
- Петлевой запрос (Loopback Request) — HTTP-запрос WordPress к самому себе для асинхронного запуска WP-Cron без задержки текущего ответа посетителю.
- WP—CLI — командный интерфейс WordPress, позволяющий запускать очередь крон-событий через wp cron event run —due-now без участия веб-сервера и ограничений PHP.