WordPress Notes WP-1

Использование WP-Cron для автоматических задач в WordPress

Что такое 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. Для этого:

  1. В wp-config.php добавьте:
define('DISABLE_WP_CRON', true);
  1. Настройте системный 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Точная периодичность; не зависит от посещений; стабильностьТребует доступа к серверу; сложнее настроитьРекомендуется для серьёзных проектов
×
Прокачай свой WordPress!

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

Воспользоваться сейчас ⋙