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

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

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

Особенности работы WP-Cron

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

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

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

  • Активирован ли WP-Cron? В файле wp-config.php не должно быть define('DISABLE_WP_CRON', true);.
  • Проверить, запускается ли WP-Cron при посещениях сайта: можно использовать плагин WP Crontrol.
  • Проверить логи сервера на ошибки, связанные с WP-Cron.
  • Проверить, не блокируют ли серверные настройки (например, firewall, ModSecurity) запросы к wp-cron.php.

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

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

1. Добавляем интервал 10 минут

add_filter('cron_schedules', function($schedules) {
    if (!isset($schedules['every_ten_minutes'])) {
        $schedules['every_ten_minutes'] = [
            'interval' => 600, // 600 секунд = 10 минут
            'display' => __('Каждые 10 минут')
        ];
    }
    return $schedules;
});

2. Регистрируем задачу при инициализации

function myplugin_activate_cron() {
    if (!wp_next_scheduled('myplugin_every_ten_minutes')) {
        wp_schedule_event(time(), 'every_ten_minutes', 'myplugin_every_ten_minutes');
    }
}
add_action('wp', 'myplugin_activate_cron');

3. Создаем функцию-обработчик задачи

add_action('myplugin_every_ten_minutes', function() {
    // Здесь ваш код, например, очистка устаревших данных
    global $wpdb;
    $wpdb->query("DELETE FROM wp_sessions WHERE session_expiry < UNIX_TIMESTAMP()");
});

4. Отмена задачи при деактивации плагина

function myplugin_deactivate_cron() {
    $timestamp = wp_next_scheduled('myplugin_every_ten_minutes');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'myplugin_every_ten_minutes');
    }
}
register_deactivation_hook(__FILE__, 'myplugin_deactivate_cron');

Проверка работы WP-Cron задачи

Для проверки, что задача успешно выполняется:

  • Установите плагин WP Crontrol. В разделе «Cron Events» найдите событие myplugin_every_ten_minutes. Убедитесь, что оно запланировано и не имеет ошибок.
  • Добавьте в функцию-обработчик логирование в файл, например, error_log('WP-Cron myplugin_every_ten_minutes выполнен');. Проверьте логи сервера (обычно error_log или через панель хостинга).
  • Для принудительного запуска используйте кнопку "Run Now" в WP Crontrol.

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

  • Задачи не запускаются: вероятно, в wp-config.php отключён WP-Cron (DISABLE_WP_CRON), либо сервер блокирует запросы к wp-cron.php. Проверьте настройки firewall и .htaccess.
  • Несвоевременный запуск: WP-Cron зависит от посещений сайта. Если мало трафика, используйте системный cron (Linux cron job), настроив вызов wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1 каждые 5 минут.
  • Дублирование задач: перед планированием новой задачи всегда проверяйте, нет ли уже запланированной с помощью wp_next_scheduled().

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

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

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

ВариантПлюсыМинусы
Встроенный WP-CronПрост в настройке, не требует доступа к серверуЗависит от трафика, возможны задержки
Системный cron (Linux)Точный запуск по расписанию, стабильностьНужен доступ к серверу, настройка через SSH
Внешние сервисы (например, cron-job.org)Не требует сервера, легко настроитьЗависит от стороннего сервиса, возможны ограничения по частоте
Как избавиться от проблем с переадресацией в WordPress при использовании WooCommerce
07.05.2026
Синхронизация пользовательских настроек WordPress в мультисайте
23.01.2026
Как удалить неиспользуемые плагины в WordPress без риска для сайта
26.11.2025
Как исправить ошибку 429 «Слишком много запросов» в WordPress
30.04.2026
Как создать собственный плагин для синхронизации данных WordPress
07.11.2025