Как создать автоматические задачи в WordPress на основе WP-Cron

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

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

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

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

WP-Cron хранит расписание задач в базе данных в таблице wp_options в параметре cron. Каждая задача имеет имя, время запуска и callback-функцию.

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

Для создания своей задачи нужно выполнить несколько шагов:

  1. Определить функцию, которая будет выполняться;
  2. Зарегистрировать событие с помощью wp_schedule_event;
  3. Привязать функцию к событию через хук add_action;
  4. При необходимости — удалить задачу.

Пример: ежедневная очистка устаревших данных

function wpmax_daily_cleanup() {
    global $wpdb;
    $table = $wpdb->prefix . 'wpmax_data';
    $wpdb->query("DELETE FROM $table WHERE created_at < NOW() - INTERVAL 30 DAY");
}

add_action('wpmax_daily_cleanup_hook', 'wpmax_daily_cleanup');

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

В этом примере мы создали функцию wpmax_daily_cleanup, которая удаляет записи старше 30 дней из пользовательской таблицы. Затем назначили эту функцию на хук wpmax_daily_cleanup_hook. А в функции wpmax_schedule_daily_cleanup мы проверяем, запланирована ли уже задача, и если нет — добавляем её в расписание с интервалом daily.

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

По умолчанию WordPress поддерживает только интервалы hourly (часовой), twicedaily (два раза в день) и daily (ежедневно). Если нужна своя периодичность, можно добавить её через фильтр cron_schedules.

Пример: добавим интервал в 15 минут

function wpmax_custom_cron_intervals($schedules) {
    $schedules['every_fifteen_minutes'] = [
        'interval' => 15 * 60, // 15 минут в секундах
        'display' => __('Каждые 15 минут')
    ];
    return $schedules;
}
add_filter('cron_schedules', 'wpmax_custom_cron_intervals');

Теперь при регистрации события можно использовать этот интервал:

wp_schedule_event(time(), 'every_fifteen_minutes', 'wpmax_some_custom_hook');

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

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

Проверка запланированных задач

Для просмотра всех запланированных событий удобно использовать плагин WP Crontrol. Он позволяет:

  • просматривать все задачи и их расписание;
  • удалять и редактировать задачи;
  • запускать задачи вручную.

Вызов WP-Cron вручную

Если нужно запустить все запланированные задачи без посещения сайта, можно вызвать cron вручную через системный cron (рекомендуется для живых сайтов):

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

Или настроить в wp-config.php отключение встроенного WP-Cron и запускать системный cron отдельно:

define('DISABLE_WP_CRON', true);

Использование плагинов для расширенной работы с WP-Cron

Кроме WP Crontrol, есть и другие полезные инструменты для работы с автоматическими задачами:

  • Clearfy Pro — содержит оптимизации и улучшения работы WP-Cron, позволяя снизить нагрузку и повысить стабильность планировщика. Подробнее на wpshop.ru.
  • WP Crontrol — для управления расписанием и отладки.

Удаление и очистка запланированных задач

Если задача больше не нужна, важно её удалить, чтобы не засорять расписание и не создавать лишнюю нагрузку.

Пример удаления запланированной задачи

function wpmax_clear_scheduled_tasks() {
    $timestamp = wp_next_scheduled('wpmax_daily_cleanup_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpmax_daily_cleanup_hook');
    }
}
add_action('switch_theme', 'wpmax_clear_scheduled_tasks');

Выше пример удаления задачи при смене темы — полезно для чистоты кода.

Резюме и рекомендации по работе с WP-Cron

WP-Cron — мощный инструмент для автоматизации задач в WordPress, но требует понимания особенностей работы. Для стабильности лучше:

  • Добавлять свои интервалы при необходимости;
  • Использовать проверку wp_next_scheduled перед добавлением новых задач;
  • Отлаживать с помощью плагина WP Crontrol;
  • При высокой нагрузке запускать WP-Cron через системный cron;
  • Удалять ненужные задачи для оптимизации.

Применяя эти методы, вы сможете успешно автоматизировать очистку базы, отправку писем, обновление кеша и другие задачи без лишних плагинов и сложных настроек.

Как создать автоматические отзывы на сайте WordPress
14.03.2026
Как создать автоматический отчет о проблемах безопасности WordPress
21.03.2026
WooCommerce: как исключить товар из каталога и поиска без удаления
01.06.2026
WooCommerce: как избежать конфликтов между кастомными плагинами
23.06.2026
WooCommerce: как полностью отключить отмену заказов через личный кабинет
04.05.2026