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

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

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

Из-за этого у WP-Cron есть свои особенности и ограничения, которые важно понимать при использовании для автоматизации. Например, если на сайт долго никто не заходит, задачи могут запускаться с задержкой. С другой стороны, для большинства сайтов с регулярным трафиком WP-Cron отлично справляется с задачами без дополнительной настройки.

В этой статье мы рассмотрим, как правильно использовать WP-Cron, как создавать собственные задачи, и приведём примеры полезных плагинов и кода для практического применения.

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

Основные функции для работы с WP-Cron

Для работы с WP-Cron в WordPress есть несколько ключевых функций:

  • wp_schedule_event() — регистрирует повторяющуюся задачу;
  • wp_clear_scheduled_hook() — удаляет запланированную задачу;
  • wp_next_scheduled() — проверяет, есть ли уже запланированная задача;
  • add_action() — связывает функцию с событием WP-Cron.

Пример регистрации задачи, которая будет запускаться раз в час:

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

function wpsolution_hourly_event_function() {
    // Логика задачи
    error_log('WP-Cron: ежечасная задача выполнена');
}
add_action( 'wpsolution_hourly_event_hook', 'wpsolution_hourly_event_function' );

Здесь мы создаём событие с хук-именем wpsolution_hourly_event_hook, которое будет срабатывать каждый час. Внутри функции wpsolution_hourly_event_function можно разместить любой код, который должен выполняться по расписанию.

Добавление своих интервалов времени

По умолчанию WP-Cron поддерживает интервалы 'hourly', 'twicedaily' и 'daily'. Чтобы добавить собственный интервал, можно использовать фильтр cron_schedules:

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

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

wp_schedule_event( time(), 'every_five_minutes', 'wpsolution_five_min_event' );

Решение проблемы с запуском WP-Cron на «мертвых» сайтах

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

Для отключения WP-Cron в файле wp-config.php добавьте:

define( 'DISABLE_WP_CRON', true );

Далее в планировщике задач сервера (например, crontab в Linux) создайте задачу, которая раз в 5 минут будет запускать скрипт wp-cron.php:

*/5 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Такой подход гарантирует, что задачи будут запускаться точно по расписанию, независимо от посещаемости сайта.

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

Пример 1: Автоматическая очистка старых ревизий постов

С течением времени база данных WordPress может разрастаться из-за большого количества ревизий записей. С помощью WP-Cron можно регулярно удалять ревизии старше определённого срока.

function wpsolution_delete_old_revisions() {
    global $wpdb;
    $days = 30; // Удалять ревизии старше 30 дней
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));
    $wpdb->query( $wpdb->prepare(
        "DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_modified < %s",
        $date
    ));
}

function wpsolution_schedule_revision_cleanup() {
    if ( ! wp_next_scheduled( 'wpsolution_revision_cleanup_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wpsolution_revision_cleanup_hook' );
    }
}
add_action( 'wp', 'wpsolution_schedule_revision_cleanup' );
add_action( 'wpsolution_revision_cleanup_hook', 'wpsolution_delete_old_revisions' );

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

Пример 2: Отправка еженедельной рассылки с новыми постами

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

function wpsolution_send_weekly_newsletter() {
    $args = array(
        'post_type' => 'post',
        'date_query' => array(
            'after' => '1 week ago',
        ),
        'posts_per_page' => 10
    );
    $posts = get_posts( $args );
    if ( empty($posts) ) return;

    $message = "Новые статьи за неделю:\n";
    foreach ( $posts as $post ) {
        $message .= $post->post_title . " - " . get_permalink($post) . "\n";
    }

    $to = 'example@example.com'; // Здесь можно использовать список рассылки
    $subject = 'Еженедельная рассылка с WPSolution.ru';

    wp_mail( $to, $subject, $message );
}

function wpsolution_schedule_weekly_newsletter() {
    if ( ! wp_next_scheduled( 'wpsolution_weekly_newsletter_hook' ) ) {
        wp_schedule_event( time(), 'weekly', 'wpsolution_weekly_newsletter_hook' );
    }
}
add_action( 'wp', 'wpsolution_schedule_weekly_newsletter' );
add_action( 'wpsolution_weekly_newsletter_hook', 'wpsolution_send_weekly_newsletter' );
<

Этот пример можно доработать, подключив список подписчиков из базы данных или сторонних сервисов рассылки.

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

Cron Control

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

WP Crontrol

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

Использование этих плагинов существенно облегчает работу с автоматизацией и помогает быстро находить и устранять проблемы с выполнением задач.

Советы и рекомендации по работе с WP-Cron

Для стабильной работы системы автоматизации важно придерживаться нескольких правил:

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

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

Как отключить автоматические обновления WordPress
03.01.2026
Как создать автозаполняемый формат даты в WordPress с примером кода
04.04.2026
Как использовать WPRemark для анализа качества контента в WordPress
16.02.2026
Автоматическое удаление отзывов в WooCommerce после их модерации
22.05.2026
Как использовать Metabox для создания дополнительных полей в WordPress
15.12.2025