wp-kurs.ru wordpress WP-Kurs

Как настроить отложенный запуск задач в WordPress без плагинов

Почему стандартный WP-Cron не всегда подходит для отложенных задач

WordPress использует собственный механизм WP-Cron для запуска запланированных задач (cron jobs), но он активируется только при посещении сайта. Это приводит к задержкам или пропуску задач, если трафик низкий или нестабилен, что критично для автоматизации важных процессов, например, импорта данных, отправки уведомлений или очистки базы.

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

Чтобы проверить, как работает WP-Cron, выполните в консоли WP-CLI команду:

wp cron event list --fields=hook,next_run

Если вы видите задачи с датами в прошлом или задачи не выполняются регулярно, значит WP-Cron не срабатывает автоматически.

Также можно проверить логи веб-сервера и PHP на наличие ошибок, связанных с wp-cron.php.

Пошаговое решение: настройка системного cron и отключение WP-Cron

1. Отключаем WP-Cron в WordPress

Добавьте в wp-config.php строку, которая отключит стандартный WP-Cron:

define('DISABLE_WP_CRON', true);

2. Создаём системное задание cron на сервере

Подключитесь к серверу по SSH и откройте редактор crontab:

crontab -e

Добавьте задачу, которая будет вызывать wp-cron.php каждую минуту (или с нужным интервалом):

* * * * * wget -q -O - https://ваш-домен.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Или, что безопаснее и эффективнее, можно использовать команду PHP напрямую, указав путь к wp-cron.php и PHP:

* * * * * /usr/bin/php /путь/к/вашему/сайту/wp-cron.php >/dev/null 2>&1

3. Проверяем, что cron работает

Через некоторое время проверьте список заданий снова:

wp cron event list --fields=hook,next_run

Дата next_run должна обновляться регулярно, а задачи выполняться в соответствии с расписанием.

Как вручную запускать и тестировать задачи WP-Cron

Для проверки конкретных задач можно использовать WP-CLI:

wp cron event run --due-now

Это запустит все просроченные задачи.

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

  • Ошибка 403/401 при вызове wp-cron.php через wget/curl: Проверьте настройки .htaccess и файрвола, убедитесь, что вызов с локального сервера разрешён.
  • Неверный путь к PHP в crontab: Уточните путь командой which php и используйте абсолютный путь.
  • WP-Cron отключён, но задачи не выполняются: Проверьте, что системный cron действительно запущен и работает.
  • Задания не создаются в базе: Проверьте права пользователя и наличие ошибок в логах PHP.

Таблица сравнения: WP-Cron vs Системный Cron

ПараметрWP-CronСистемный Cron
Запуск задачПри посещении сайтаПо расписанию в ОС
НадёжностьЗависит от трафикаВысокая, стабильная
НастройкаПростая, встроенаТребует доступа к серверу
ЗадержкиВозможныМинимальные
ПроизводительностьМожет замедлять сайтНе влияет на сайт

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

  • Используйте вызов PHP из командной строки вместо wget/curl — это быстрее и безопаснее.
  • Ограничьте доступ к wp-cron.php через .htaccess, чтобы избежать внешних вызовов.
  • Для сайтов с высоким трафиком настройте интервал запуска cron в 5 минут или больше, чтобы снизить нагрузку.
  • Регулярно проверяйте логи cron и ошибок PHP для своевременного обнаружения проблем.
  • Если используете WooCommerce или другие плагины, чувствительные к cron, тестируйте штатное поведение при переходе на системный cron.

Пример кода: создание кастомного задания cron в WordPress

add_action('custom_hourly_event', 'custom_hourly_function');

function custom_hourly_function() {
    // Ваш код, выполняющийся ежечасно
    error_log('Custom hourly event fired: ' . current_time('mysql'));
}

// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('custom_hourly_event')) {
    wp_schedule_event(time(), 'hourly', 'custom_hourly_event');
}

Этот код создаёт событие, которое будет запускаться ежечасно. При использовании системного cron сработает без задержек.

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

  • Проверяйте логи ошибок PHP или добавляйте запись в error_log, как в примере выше.
  • Используйте WP-CLI для просмотра и запуска задач.
  • Для более сложных задач добавляйте пользовательские логи или уведомления.
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙