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

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

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

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

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

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

Проверить, работают ли задачи, можно с помощью плагина WP Crontrol (https://wordpress.org/plugins/wp-crontrol/). Он показывает список задач и позволяет запускать их вручную.

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

1. Добавляем хук с функцией, которую нужно выполнять

function wpqa_custom_cron_task() {
    // Пример: очистка временных опций
    global $wpdb;
    $wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP()");
}
add_action('wpqa_custom_cron_hook', 'wpqa_custom_cron_task');

2. Регистрируем событие при активации темы или плагина

function wpqa_schedule_custom_cron() {
    if (!wp_next_scheduled('wpqa_custom_cron_hook')) {
        wp_schedule_event(time(), 'hourly', 'wpqa_custom_cron_hook');
    }
}
add_action('wp', 'wpqa_schedule_custom_cron');

3. Удаляем задачу при деактивации

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

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

Для проверки:

  • Установите и активируйте WP Crontrol.
  • Перейдите в раздел «Cron Events» и найдите вашу задачу wpqa_custom_cron_hook.
  • Запустите задачу вручную через интерфейс плагина и проверьте, что функция wpqa_custom_cron_task сработала, например, через логи или изменения в базе.
  • Подождите, чтобы убедиться, что задача запускается автоматически с заданной периодичностью.

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

  • DISABLE_WP_CRON установлен в true: WP-Cron не сработает. Проверьте wp-config.php и отключите эту константу, если не используете системный cron.
  • Низкий трафик сайта: WP-Cron в стандартном режиме запускается только при загрузке страниц. На сайтах с низким трафиком задачи могут запускаться с задержкой. Решение — настроить системный cron для вызова wp-cron.php.
  • Ошибки в коде функций задачи: Если в функции есть ошибки PHP, задача не выполнится. Включите журнал ошибок и отладку для диагностики.
  • Несоответствие интервалов планирования: Стандартные интервалы — hourly, daily, twicedaily. Для кастомных интервалов нужно добавить их через фильтр cron_schedules.

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

  • Не запускайте ресурсоёмкие операции слишком часто — выбирайте разумный интервал.
  • Избегайте выполнения задач, которые могут блокировать сайт — используйте асинхронные вызовы или offload в сторонние сервисы.
  • Для повышения надежности используйте системный cron, который вызывает wp-cron.php каждые 15 минут:
    */15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
  • Для расширенной автоматизации рассмотрите плагины типа WPGPT от WPShop для интеграции с AI и автоматизации контента.

Пример добавления кастомного интервала планирования

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

После этого можно использовать 'every_five_minutes' при регистрации задачи.

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

Способ запускаПлюсыМинусыКогда использовать
Стандартный (запуск при загрузке страниц)Не требует настроек, простЗависит от трафика сайта, задержкиДля сайтов с хорошим трафиком
Системный cron (через crontab)Точный запуск по расписанию, надеженТребует доступа к серверу, настройкуДля сайтов с низким трафиком или критичными задачами
Плагины для управления cronУдобный интерфейс, диагностикаДополнительная нагрузка, зависимость от плагинаДля разработчиков и администраторов, нуждающихся в контроле
Как автоматизировать рассылку новостей в WordPress
17.02.2026
Как изменить стоимость товара в WooCommerce в зависимости от роли пользователя
23.05.2026
Как добавить динамические метаданные в WordPress для улучшения SEO
12.03.2026
Оптимизация изображений в WordPress для ускорения сайта
24.12.2025
Как удалить все заказы WooCommerce одним кодом
19.05.2026