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

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

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

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

Если ваши автоматические задачи не выполняются вовремя, проверьте следующее:

  • Активен ли WP-Cron — в wp-config.php должна отсутствовать или быть false константа DISABLE_WP_CRON.
  • Нет ли конфликтов с плагинами или темами, которые отключают WP-Cron.
  • Есть ли ошибки в логах сервера или WP, связанные с выполнением крон-задач.
  • Проверить расписание задач можно с помощью плагинов, например WP Crontrol.

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

1. Проверка и включение WP-Cron

Убедитесь, что в файле wp-config.php нет строки:

define('DISABLE_WP_CRON', true);

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

2. Регулярный запуск WP-Cron через системный cron (рекомендуется)

Чтобы избежать проблем с запуском при низком трафике, отключите WP-Cron и добавьте системный cron на сервере:

define('DISABLE_WP_CRON', true);

В cron на сервере добавьте задачу, например запускающую WP-Cron каждые 5 минут:

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

Или с помощью curl:

*/5 * * * * curl -so /dev/null https://example.com/wp-cron.php?doing_wp_cron

Замените https://example.com на URL вашего сайта.

3. Добавление своей задачи в WP-Cron

Пример функции, которая будет запускаться автоматически:

function wp3_custom_cron_task() {
    // Пример: удаляем устаревшие записи из кастомной таблицы
    global $wpdb;
    $table = $wpdb->prefix . 'custom_data';
    $wpdb->query( $wpdb->prepare("DELETE FROM $table WHERE date < %s", date('Y-m-d', strtotime('-30 days'))) );
}

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

// Подключаем функцию к событию
add_action( 'wp3_daily_cleanup', 'wp3_custom_cron_task' );

Этот код очищает базу от записей старше 30 дней раз в сутки.

4. Использование WP Crontrol для управления задачами

Плагин WP Crontrol позволяет просматривать, запускать и редактировать задачи WP-Cron прямо из админки. Это удобно для отладки и контроля.

Как проверить, что WP-Cron работает корректно

  • Установите и активируйте WP Crontrol.
  • Перейдите в «Инструменты» -> «Cron Events» и убедитесь, что ваша задача отображается и запланирована.
  • Попробуйте выполнить задачу вручную через интерфейс плагина.
  • Проверьте, что действие, связанное с задачей, действительно выполняется (например, данные очищаются, письма отправляются).

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

  • DISABLE_WP_CRON установлена в true — WP-Cron не запускается автоматически. Решение: отключить эту константу и настроить системный cron.
  • Низкий трафик сайта — WP-Cron не запускается вовремя, т.к. запускается только при посещении сайта. Решение: использовать системный cron.
  • Неправильный хук или функция — задача не выполняется. Проверьте, что имя хука и функция совпадают и функция подключена.
  • Ошибки в коде задачи — задача запускается, но ничего не происходит. Проверьте логи, отладьте функцию.

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

  • Не перегружайте WP-Cron частыми и тяжёлыми задачами — лучше разбивайте работу на мелкие этапы.
  • Используйте системный cron вместо WP-Cron, если у вас большой или коммерческий сайт с низким трафиком.
  • Для задач, связанных с внешними API, добавляйте обработку ошибок и логи.
  • Ограничьте права доступа к wp-cron.php через htaccess или web-сервер, если запускаете его через системный cron, чтобы избежать внешних вызовов.

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

СпособПлюсыМинусыРекомендации
Стандартный WP-Cron (по визитам)Не требует настройки сервера, прост в использованииНенадёжный, зависит от трафика, может срабатывать с задержкойПодходит для небольших сайтов с постоянным трафиком
Системный cron + отключённый WP-CronТочный запуск, стабильность, не зависит от посещенийНужен доступ к серверу для настройки cronЛучший вариант для коммерческих и больших сайтов
Плагины управления cron (WP Crontrol и др.)Удобство управления, отладкиНе решает проблемы запуска, лишь визуализирует задачиИспользуйте вместе с системным cron
Как использовать метод $wpdb->prepare() для безопасных запросов к базе данных WordPress
12.05.2026
Как запретить удаление товаров в WooCommerce после покупки
19.05.2026
Как использовать WPGPT для автоматического создания контента в WordPress
29.03.2026
Как избежать проблем с виджетами в WordPress: практические советы
03.03.2026
Как добавить автоматический релиз постов в WordPress с помощью Cron
15.04.2026