Как использовать WP-Cron для автоматизации задач в WordPress

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

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

Диагностика проблем с WP-Cron

Основные признаки проблем с WP-Cron:

  • Отложенные публикации не выходят в запланированное время.
  • Не запускаются автоматические задачи плагинов, например, очистка базы данных.
  • Снижение производительности из-за частых обращений к wp-cron.php.

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

Пошаговое решение: правильная настройка WP-Cron с системным cron

Шаг 1. Отключение встроенного WP-Cron

В файле wp-config.php добавьте строку:

define('DISABLE_WP_CRON', true);

Это отключит запуск WP-Cron при каждом обращении к сайту.

Шаг 2. Настройка системного cron на сервере

В Linux-системах добавьте в cron задачу (например, запуск каждые 10 минут):

*/10 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Или, если есть доступ к PHP CLI, можно использовать прямой вызов:

*/10 * * * * php /path/to/your/site/wp-cron.php >/dev/null 2>&1

Замените https://example.com и путь к сайту на свои.

Шаг 3. Проверка работы cron-задач

Для тестирования можно вручную вызвать cron-события через WP Crontrol или добавить тестовое событие:

function wpacademy_test_cron_event() {
    error_log('WP-Cron event triggered at ' . current_time('mysql'));
}
add_action('wpacademy_test_cron_hook', 'wpacademy_test_cron_event');
if (!wp_next_scheduled('wpacademy_test_cron_hook')) {
    wp_schedule_event(time(), 'hourly', 'wpacademy_test_cron_hook');
}

Затем проверить файл debug.log для записи о срабатывании.

Как проверить результат после внедрения

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

Частые ошибки при работе с WP-Cron и как их исправить

  • WP-Cron не запускается из-за кеширования страниц. Решение: исключите wp-cron.php из кеша или отключите кеширование для него.
  • Некорректный URL в cron-задаче системного cron. Проверьте правильность URL и доступность сайта.
  • Ошибка прав доступа у файла wp-cron.php. Проверьте права на файл и папку сайта.
  • Много частых вызовов wp-cron.php замедляют сайт. Отключите встроенный cron и используйте системный cron с оптимальным интервалом.

Практические советы по безопасности и производительности

  • Запретите доступ к wp-cron.php с внешних IP, если не используете удалённый запуск.
  • Используйте HTTP-заголовок X-Requested-With: XMLHttpRequest или параметр doing_wp_cron для защиты от прямого доступа.
  • Оптимальный интервал запуска системного cron — 10-15 минут, чтобы не создавать лишней нагрузки.
  • При большом трафике на сайте лучше использовать системный cron, чтобы избежать одновременных запусков WP-Cron.

Сравнение вариантов запуска WP-Cron

МетодПреимуществаНедостатки
Встроенный WP-Cron (по умолчанию)Не требует настройки, запускается автоматически при посещении сайтаНе срабатывает при отсутствии трафика, может создавать нагрузку на сайт при большом трафике
Системный cron (Linux cron)Точный запуск по расписанию, снижает нагрузку на сайтТребует доступа к серверу и настроек, не всегда доступен на shared-хостингах
Внешние сервисы (cron-job.org и др.)Работает независимо от сервера, подходит для сайтов на shared-хостингахЗависимость от стороннего сервиса, требует безопасности при вызовах
Как создать фильтры для товаров в WooCommerce без плагинов
19.01.2026
Как удалить или скрыть свойства товара WooCommerce в админке WordPress
29.04.2026
Как избежать проблем с отправкой писем через PHP mail() в WordPress
03.05.2026
Как использовать WPCommunity для создания форума на WordPress
05.02.2026
Как удалить неиспользуемые шорткоды в WordPress: пошаговое руководство
01.03.2026