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

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

WP-Cron — это встроенный в WordPress механизм для планирования и выполнения задач по расписанию (cron jobs). Он позволяет запускать функции, например, автоматическое резервное копирование, очистку кэша, отправку уведомлений, обновление данных и многое другое без необходимости использовать системный cron на сервере.

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

Частая проблема — задачи WP-Cron не выполняются или запускаются с задержкой. Это связано с тем, что WP-Cron работает при заходе посетителя на сайт, а если трафик низкий или есть ограничения сервера, задания могут не запускаться вовремя.

Проверить, работает ли WP-Cron, можно с помощью плагина WP Crontrol. После установки перейдите в Инструменты > Cron Events и посмотрите список запланированных задач и дату их следующего запуска.

Пошаговое решение: настройка надежного запуска WP-Cron

1. Отключение встроенного WP-Cron

Чтобы избежать запуска WP-Cron при каждом заходе посетителя, отключите его, добавив в wp-config.php строку:

define('DISABLE_WP_CRON', true);

2. Настройка системного cron на сервере

Создайте задание в системном cron, которое будет вызывать WP-Cron через HTTP-запрос с нужной периодичностью (например, раз в 5 минут). Пример команды для Linux-сервера:

*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
<

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

3. Проверка работы

После настройки системного cron вернитесь в WP Crontrol и проверьте, обновляется ли время следующего запуска задач. Также можно добавить тестовое событие:

function test_wp_cron_event() {
    error_log('WP-Cron event triggered at ' . current_time('mysql'));
}

if (!wp_next_scheduled('test_wp_cron_hook')) {
    wp_schedule_event(time(), 'hourly', 'test_wp_cron_hook');
}
add_action('test_wp_cron_hook', 'test_wp_cron_event');

Через час проверьте лог ошибок сервера — должна появиться запись с отметкой времени.

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

  • WP-Cron не запускается из-за DISABLE_WP_CRON: убедитесь, что после установки системного cron этот параметр включен, иначе cron не будет работать.
  • HTTP-запрос блокируется сервером: некоторые хостинги запрещают вызов wp-cron.php через curl или wget. Проверьте доступность URL и при необходимости используйте системный php-скрипт: php /path/to/wordpress/wp-cron.php.
  • Неправильный путь к wp-cron.php в cron: для вызова из консоли используйте абсолютный путь к файлу с PHP.

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

  • Не используйте слишком частый запуск WP-Cron — 5 минут достаточно для большинства задач.
  • Отключайте WP-Cron в wp-config.php, если настроили системный cron, чтобы избежать дублирующих запусков.
  • Проверяйте, что wp-cron.php не доступен для публичного вызова, если запускаете через системный cron с консоли, ограничьте его вызовы IP или настройте аутентификацию.
  • Используйте WP Crontrol для мониторинга и устранения зависших или частых задач.

Пример планирования пользовательской задачи с WP-Cron

function my_custom_cron_job() {
    // Ваш код, например, очистка устаревших данных
    global $wpdb;
    $wpdb->query("DELETE FROM wp_postmeta WHERE meta_key = '_old_meta_key'");
}

// Регистрация события
if (!wp_next_scheduled('my_custom_cron_hook')) {
    wp_schedule_event(time(), 'daily', 'my_custom_cron_hook');
}

add_action('my_custom_cron_hook', 'my_custom_cron_job');

Этот код создаст ежедневное событие, которое будет вызывать функцию очистки метаданных.

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

СпособПлюсыМинусы
Встроенный WP-CronНе требует настройки сервера, прост в использованииЗависит от посещаемости сайта, может запускаться с задержкой
Системный cron + DISABLE_WP_CRONТочный и надежный запуск, не зависит от трафикаТребует доступа к серверу и базовых знаний Linux cron
Плагины для управления cronУдобный интерфейс, мониторинг задачДополнительная нагрузка, зависимость от плагина
Как создать автоматическое обследование сайта в WordPress для выявления проблем
25.12.2025
Как изменить URL текущей страницы в WordPress без перенаправления
13.04.2026
Как удалить пустые записи в WordPress из базы данных
31.01.2026
Как удалить пустые meta-поля в WordPress: эффективные методы и примеры
24.02.2026
Как настроить автообновления плагинов WordPress без риска поломок
17.02.2026