Что такое WP-Cron и зачем он нужен
WP-Cron — встроенная в WordPress система планировщика задач, которая позволяет запускать определённые функции в автоматическом режиме по расписанию. Это важно для задач, которые должны выполняться регулярно: очистка базы, отправка писем, обновление кэша, импорт данных и др. Однако WP-Cron отличается от системных cron-задач, так как срабатывает только при посещении сайта, что влияет на стабильность и точность.
Диагностика проблем с WP-Cron
Если автоматически запланированные задачи не выполняются, возможны несколько причин:
- WP-Cron отключён или некорректно работает;
- Отсутствуют посетители сайта, которые запускают крон;
- Конфликты с плагинами или темой;
- Сервер блокирует внутренние запросы к
wp-cron.php.
Для проверки состояния WP-Cron используйте плагин WP Crontrol. Он показывает текущие задачи, время их выполнения и позволяет запускать их вручную.
Как включить и настроить WP-Cron
Шаг 1. Проверка и включение WP-Cron
Откройте файл wp-config.php и убедитесь, что там отсутствует строка:
define('DISABLE_WP_CRON', true);Если она есть, удалите или закомментируйте, чтобы WP-Cron работал.
Шаг 2. Настройка системного cron для запуска wp-cron.php
Для повышения точности и надёжности рекомендуем отключить WP-Cron от посещений и настроить системный cron. Для этого:
- В
wp-config.phpдобавьте:
define('DISABLE_WP_CRON', true);- Настройте системный cron на сервере (пример для Linux):
*/15 * * * * wget -q -O - https://ваш_домен/wp-cron.php?doing_wp_cron >/dev/null 2>&1<Эта команда будет запускать WP-Cron каждые 15 минут.
Шаг 3. Создание собственной задачи с использованием WP-Cron
Пример добавления пользовательской задачи, которая будет запускаться раз в час:
function my_custom_cron_job() {
// Ваш код, например, очистка старых записей
}
add_action('my_hourly_event', 'my_custom_cron_job');
// Регистрируем событие, если оно ещё не добавлено
if (!wp_next_scheduled('my_hourly_event')) {
wp_schedule_event(time(), 'hourly', 'my_hourly_event');
}Для удаления задачи используйте:
$timestamp = wp_next_scheduled('my_hourly_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'my_hourly_event');
}Проверка результата после внедрения
Чтобы проверить, что WP-Cron работает корректно:
- Установите и активируйте плагин WP Crontrol;
- Перейдите в меню Инструменты > Cron Events и убедитесь, что ваши задачи отображаются;
- Используйте кнопку Run Now для ручного запуска задачи и проверьте логи или результат её работы;
- Проверьте серверный cron, если настроили системный запуск, через логи сервера или вывод
crontab -l; - Наблюдайте выполнение задач в течение суток для подтверждения автоматического срабатывания.
Частые ошибки при работе с WP-Cron и их исправление
- DISABLE_WP_CRON установлен в true, но системный cron не настроен. — Задачи не запускаются автоматически. Решение: либо убрать эту константу, либо настроить системный cron.
- Сервер блокирует внутренние HTTP-запросы. — WP-Cron не может вызвать
wp-cron.php. Проверьте настройки сервера и файрволла. - Проблемы с плагинами, вызывающими ошибки при выполнении задач. — Используйте WP_DEBUG и логи, чтобы выявить проблемные плагины, отключайте их поочерёдно.
- Задачи выполняются слишком часто или слишком редко. — Проверьте расписание задач и корректность добавления событий через
wp_schedule_event.
Практические советы по безопасности и производительности
- Отключайте WP-Cron от посещений сайта (через
DISABLE_WP_CRON) и используйте системный cron для стабильной работы и снижения нагрузки. - Добавляйте только необходимые задачи и следите за их выполнением, чтобы избежать накопления задач и замедления сайта.
- Используйте nonce и проверки прав доступа, если задачи взаимодействуют с пользователями или внешними сервисами.
- Избегайте тяжелых операций в WP-Cron, лучше делить задачи на более мелкие по времени.
Сравнение методов запуска WP-Cron
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Запуск при посещении сайта (стандартный) | Простота настройки; не требует доступа к серверу | Нет гарантии запуска без посещений; нагрузка при большом трафике | Подходит для сайтов с постоянным трафиком |
| Системный cron | Точная периодичность; не зависит от посещений; стабильность | Требует доступа к серверу; сложнее настроить | Рекомендуется для серьёзных проектов |