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

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

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

Типичные задачи для WP-Cron: отправка рассылок, очистка базы данных, публикация отложенных записей, обновление кэша и многое другое.

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

Часто WP-Cron перестаёт работать или срабатывает с задержками. Основные признаки:

  • Задачи не выполняются вовремя (или вовсе не выполняются)
  • Отложенные публикации не выходят в назначенное время
  • Плагины, завязанные на cron, не обновляются

Как проверить состояние WP-Cron:

define('DISABLE_WP_CRON', false); // В wp-config.php, проверьте, что cron не отключён

// Просмотр всех запланированных задач с помощью WP-CLI
wp cron event list

Если команда wp cron event list не показывает задачи, значит планировщик не работает или задачи не добавлены.

Пошаговое решение: корректная настройка и отладка WP-Cron

1. Проверка и отключение системного планировщика

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

// В wp-config.php
// Отключаем встроенный запуск WP-Cron
define('DISABLE_WP_CRON', true);

Затем в crontab добавить задачу (пример для запуска каждые 15 минут):

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

2. Проверка добавления задач в WP-Cron

Для добавления пользовательской задачи используется функция wp_schedule_event(). Пример добавления задачи для ежедневного запуска:

function wporg_custom_cron_job() {
    // Ваш код задачи
    error_log('Custom cron job executed');
}

add_action('wporg_daily_event', 'wporg_custom_cron_job');

function wporg_schedule_cron() {
    if (!wp_next_scheduled('wporg_daily_event')) {
        wp_schedule_event(time(), 'daily', 'wporg_daily_event');
    }
}
add_action('wp', 'wporg_schedule_cron');

Обратите внимание, что задача добавляется при каждом заходе на сайт, но с проверкой, чтобы не дублировать.

3. Отладка через логирование и WP-CLI

Для проверки срабатывания задачи можно использовать логирование через error_log() или создавать записи в базе данных.

WP-CLI позволяет запускать cron вручную:

wp cron event run --due-now

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

Чтобы убедиться, что WP-Cron работает корректно:

  • Запустите задачу вручную через WP-CLI и проверьте логи
  • Проверьте, что запланированные события появляются в списке wp cron event list
  • Проверьте фактический результат задачи (например, обновление данных или запись в лог)

Частые ошибки и их устранение

Ошибка 1: Задачи не запускаются из-за кеширования

Некоторые кеширующие плагины или CDN блокируют запуск cron при загрузке страниц. Решение — отключить кеширование для wp-cron.php или настроить системный cron.

Ошибка 2: Множественное дублирование задач

Если не проверять наличие задачи перед планированием, может создаваться множество одинаковых задач. Всегда используйте wp_next_scheduled().

Ошибка 3: Отключён WP-Cron в wp-config.php

Проверьте наличие константы DISABLE_WP_CRON и её значение.

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

  • Для стабильности лучше выключить встроенный WP-Cron и настроить системный cron на сервере.
  • Ограничьте частоту запуска задач, чтобы не создавать нагрузку.
  • Не выполняйте в cron задачи, требующие интерактивного ввода или длительной загрузки.
  • Защитите wp-cron.php от внешнего доступа, например, через проверку user-agent или IP, если используете wget/cURL в системном cron.

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

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

Скачать WP с оф. сайта Магазин проверенных платных тем