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

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

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

Особенности WP-Cron

  • Запускается при обращении к сайту, а не по реальному времени.
  • Зависит от посещаемости: если сайт не посещают, задачи могут задерживаться.
  • Поддерживает регистрацию собственных событий и расписаний.

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

Частая проблема — задачи WP-Cron не выполняются вовремя или вообще не запускаются. Чтобы проверить, работает ли WP-Cron, используйте следующий код в functions.php или в отдельном плагине:

add_action('wp_footer', function() {
    if (wp_next_scheduled('my_test_cron_event')) {
        echo 'WP-Cron работает.';
    } else {
        echo 'WP-Cron не запущен.';
    }
});

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

Пошаговое решение: как добавить и настроить собственную задачу с WP-Cron

1. Регистрируем пользовательский хук и событие

function my_custom_cron_job() {
    // Ваш код задачи, например, очистка старых записей
    global $wpdb;
    $wpdb->query( "DELETE FROM {$wpdb->prefix}posts WHERE post_date < NOW() - INTERVAL 30 DAY AND post_status = 'trash'" );
}
add_action('my_custom_cron_hook', 'my_custom_cron_job');

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

2. Добавляем кастомный интервал (если нужен)

add_filter('cron_schedules', function($schedules) {
    $schedules['every_five_minutes'] = [
        'interval' => 300, // 300 секунд = 5 минут
        'display' => 'Каждые 5 минут'
    ];
    return $schedules;
});

// Используем в расписании
if (! wp_next_scheduled('my_custom_cron_hook')) {
    wp_schedule_event(time(), 'every_five_minutes', 'my_custom_cron_hook');
}

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

Чтобы убедиться, что задача запускается, добавьте в функцию логирование:

function my_custom_cron_job() {
    error_log('Cron task fired at ' . current_time('mysql'));
    // остальной код
}

Проверьте файл error_log или включите отладку WordPress (define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);) и посмотрите wp-content/debug.log. Можно также вручную запустить cron с помощью WP-CLI:

wp cron event run --due-now

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

  • WP-Cron не запускается при отсутствии трафика: Решение — настроить системный cron на сервере и вызывать WP-Cron вручную через curl или wp-cron.php. Пример команды для cron:
* * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
  • Дублирование задач: перед созданием задачи проверяйте, не запланирована ли она уже через wp_next_scheduled().
  • Плохая производительность: избегайте тяжелых операций в cron, разбивайте задачи на части, используйте транзиенты для кеширования результатов.

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

  • Отключите WP-Cron по умолчанию, если настроен системный cron: define('DISABLE_WP_CRON', true); в wp-config.php.
  • Используйте WP-CLI для отладки и запуска задач вручную.
  • Не храните в задачах чувствительные данные без шифрования.
  • Проверяйте коллизии с другими плагинами, которые могут использовать WP-Cron.

Сравнение вариантов запуска cron задач

ВариантОписаниеПлюсыМинусы
Стандартный WP-CronЗапускается при посещении сайтаНе требует настройки сервераЗависит от трафика, возможны задержки
Системный cron + вызов wp-cron.phpНастраивается на сервереТочные интервалы, надежностьТребует доступа к серверу и знаний
Плагины планировщиков (WP Crontrol)Управление задачами из админкиУдобство, отладкаЗависит от WP-Cron, могут быть ограничения
Как создать автоматические отчёты в WordPress с помощью WPRemark
14.02.2026
Как удалить старые медиа файлы в WordPress
11.02.2026
Как создать поддержку многоязычности в WordPress без плагинов
18.11.2025
Как удалить неактивные товары WooCommerce с помощью кода
10.05.2026
Как создать динамические таблицы в WordPress с помощью шорткодов
05.01.2026