Как сделать отложенный запуск задач в WordPress с помощью WP-Cron

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

Что такое WP-Cron и как он работает

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

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

Типы задач в WP-Cron

В WP-Cron можно создавать одноразовые задачи и повторяющиеся. Повторяющиеся задачи требуют регистрации интервалов времени. По умолчанию в WordPress есть несколько интервалов: hourly (часовой), twicedaily (два раза в день), daily (ежедневный).

Для более гибкого расписания можно добавить собственные интервалы.

Как добавить кастомный интервал для WP-Cron

Чтобы добавить, например, интервал в 10 минут, нужно использовать фильтр wp-kit_custom_cron_schedules, который мы создадим так:

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

После этого в списке интервалов можно будет использовать every_ten_minutes.

Как зарегистрировать и запланировать задачу в WP-Cron

Для регистрации задачи нужно использовать функцию wp_schedule_event(). Пример регистрации задачи, которая запускается каждые 10 минут:

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

Здесь wpkit_custom_cron_hook — уникальный хук, на который нужно повесить функцию-обработчик.

Создание обработчика задачи

Теперь нужно определить функцию, которая будет выполняться по расписанию:

function wpkit_custom_cron_function() {
    // Пример: очистка временных данных или отправка писем
    error_log('WP-Kit: Запуск отложенной задачи в '.date('Y-m-d H:i:s'));
    // Здесь пишем ваш код обработки
}
add_action('wpkit_custom_cron_hook', 'wpkit_custom_cron_function');

Как удалить задачу из планировщика

Если нужно отменить задачу, используется wp_clear_scheduled_hook():

function wpkit_clear_custom_task() {
    wp_clear_scheduled_hook('wpkit_custom_cron_hook');
}
// Для выполнения вызовите функцию один раз или через админку
// wpkit_clear_custom_task();

Оптимизация работы WP-Cron с использованием системного cron

Поскольку WP-Cron запускается только при посещениях, для сайтов с малой посещаемостью рекомендуется отключить стандартный WP-Cron и настроить системный cron, который будет вызывать файл wp-cron.php с нужной периодичностью.

Отключение WP-Cron делается в wp-config.php:

define('DISABLE_WP_CRON', true);

После этого добавьте в системный cron задачу:

*/10 * * * * wget -q -O - https://yourdomain.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Замените yourdomain.ru на адрес вашего сайта. Это обеспечит запуск задач WP-Cron каждые 10 минут независимо от посещаемости.

Практическое применение: отправка рассылки с помощью WP-Cron

Рассмотрим пример автоматической рассылки писем подписчикам каждые сутки. Сначала зарегистрируем задачу:

function wpkit_schedule_daily_newsletter() {
    if (!wp_next_scheduled('wpkit_daily_newsletter_hook')) {
        wp_schedule_event(time(), 'daily', 'wpkit_daily_newsletter_hook');
    }
}
add_action('wp', 'wpkit_schedule_daily_newsletter');

Теперь создадим обработчик, который соберёт подписчиков и отправит письма:

function wpkit_send_daily_newsletter() {
    $subscribers = get_users(array('role' => 'subscriber'));
    foreach ($subscribers as $user) {
        wp_mail($user->user_email, 'Ежедневная рассылка', 'Здравствуйте, это ваша ежедневная новость!');
    }
}
add_action('wpkit_daily_newsletter_hook', 'wpkit_send_daily_newsletter');
<

Этот простой пример можно расширить, интегрируя с плагинами рассылок или сервисами SMTP для надежной доставки.

Полезные плагины для управления WP-Cron

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

  • Clearfy Pro — содержит функции для очистки и оптимизации WP-Cron;
  • WPRemark — позволяет управлять запланированными задачами через админку;
  • Expert Review — инструмент для оценки производительности, в том числе связанных с WP-Cron процессов.

Эти решения пригодятся для контроля и диагностики работы планировщика на вашем сайте.

Как удалить старые версии WooCommerce после обновления без проблем
01.07.2026
Оптимизация производительности WordPress при работе с большими базами данных
15.01.2026
Автоматическое отображение динамических пользовательских форм в WordPress
20.03.2026
Как автоматизировать управление ролями и правами в WordPress
18.01.2026
Автоматическое создание резервных копий WordPress без плагинов
23.03.2026