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

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

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

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

Для запуска WP-Cron используется функция wpco_wp_cron_run(), которая проверяет очередь задач и вызывает необходимые хуки.

Основные преимущества WP-Cron:

  • Не требует доступа к системному cron;
  • Легко настраивается через код и плагины;
  • Работает на любом хостинге, поддерживающем PHP.

Но есть и недостатки:

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

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

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

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

function wpco_do_daily_event() {
    // Здесь размещаем код, который нужно выполнять ежедневно
    error_log('WP-Cron событие выполнено');
}
add_action( 'wpco_daily_event_hook', 'wpco_do_daily_event' );

Обратите внимание, что мы проверяем наличие уже запланированного события с помощью wp_next_scheduled(), чтобы не создавать дубли.

Регистрируем собственный интервал

В WordPress есть стандартные интервалы: hourly, twicedaily, daily. Если нужны свои, можно добавить через фильтр:

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

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

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

Автоматическое удаление временных данных

Часто в плагинах и темах необходимо очищать временные таблицы или опции. Например, удалим устаревшие пользовательские метаданные:

function wpco_cleanup_user_meta() {
    global $wpdb;
    $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key = '_wpco_temp_data' AND meta_value < NOW()" );
}
add_action( 'wpco_cleanup_user_meta_hook', 'wpco_cleanup_user_meta' );

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

Отправка регулярных email-отчетов

Автоматическая рассылка отчетов администраторам — частая задача. Пример отправки еженедельного отчета:

function wpco_send_weekly_report() {
    $admin_email = get_option( 'admin_email' );
    $subject = 'Еженедельный отчет сайта';
    $message = 'Здесь ваш отчет с нужными данными';
    wp_mail( $admin_email, $subject, $message );
}
add_action( 'wpco_weekly_report_hook', 'wpco_send_weekly_report' );

function wpco_schedule_weekly_report() {
    if ( ! wp_next_scheduled( 'wpco_weekly_report_hook' ) ) {
        wp_schedule_event( time(), 'weekly', 'wpco_weekly_report_hook' );
    }
}
add_action( 'wp', 'wpco_schedule_weekly_report' );

Оптимизация и отладка WP-Cron

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

Чтобы проверить запланированные задания, можно использовать функцию wpco_list_scheduled_crons():

function wpco_list_scheduled_crons() {
    $crons = _get_cron_array();
    if ( empty( $crons ) ) {
        echo 'Запланированных задач нет';
        return;
    }
    echo '<ul>';
    foreach ( $crons as $timestamp => $cron ) {
        foreach ( $cron as $hook => $events ) {
            foreach ( $events as $event ) {
                echo '<li>' . esc_html( $hook ) . ' запланировано на ' . date( 'Y-m-d H:i:s', $timestamp ) . '</li>';
            }
        }
    }
    echo '</ul>';
}

Для вызова задач вручную можно использовать URL с параметром wp-cron.php?doing_wp_cron, но лучше настраивать системный cron на сервере, если есть такая возможность, чтобы запускать wp-cron.php регулярно и независимо от посещаемости сайта.

Как отключить WP-Cron и настроить системный cron

Иногда WP-Cron создает проблемы с производительностью, особенно на больших сайтах. В этом случае лучше отключить его и настроить системный cron:

  1. Отключите WP-Cron в wp-config.php добавив:
define('DISABLE_WP_CRON', true);
  1. Создайте системную задачу cron на сервере, которая будет вызывать wp-cron.php, например, каждые 15 минут:
*/15 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&1
<

Такой подход гарантирует своевременное выполнение задач без зависимости от посещаемости сайта.

Рекомендуемые плагины для работы с WP-Cron и автоматизацией в WordPress

  • WP Crontrol — позволяет просматривать и редактировать запланированные задачи через админку.
  • Clearfy Pro — оптимизация и контроль загрузки, включая управление WP-Cron.
  • Advanced Cron Manager — удобный интерфейс для управления задачами.

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

Выводы и советы по работе с WP-Cron

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

  • Используйте wp_schedule_event() и проверяйте дубли с wp_next_scheduled();
  • Добавляйте кастомные интервалы через фильтр cron_schedules;
  • Для критичных задач лучше настроить системный cron и отключить WP-Cron;
  • Используйте плагины для мониторинга и отладки задач;
  • Оптимизируйте код задач, чтобы они не создавали лишнюю нагрузку.

Подробнее о работе с WP-Cron и других инструментах автоматизации можно узнать на Clearfy Pro — плагине для оптимизации и управления задачами WordPress.

WooCommerce: как сделать возвраты товаров с автоматизацией
18.04.2026
Как создать автоматический экспорт данных WordPress в CSV с примерами кода
15.01.2026
WooCommerce: как автоматически удалять товары по истечении срока действия
16.05.2026
Как создать автоматический импорт данных из Excel в WordPress
09.01.2026
Как добавить расширенные типы данных в WordPress
11.12.2025