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

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

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

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

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

WP-Cron хранит задачи в опциях базы данных и запускает их с помощью хука wp_manual_cron_wp_schedule_event.

Как проверить и отладить WP-Cron

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

Плагин WP Crontrol для управления задачами

Плагин WP Crontrol — отличный инструмент для просмотра, редактирования и удаления задач WP-Cron прямо из админки WordPress.

  • Устанавливаем и активируем плагин.
  • В разделе Инструменты > Cron Events видим список запланированных задач.
  • Можно запускать задачи вручную, удалять или добавлять собственные.

Это поможет понять, есть ли вообще активные задачи и когда они должны запускаться.

Проверка системного cron

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

*/15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Или с помощью curl:

*/15 * * * * curl https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

При такой настройке в wp-config.php нужно отключить запуск WP-Cron при заходе посетителей, добавив:

define('DISABLE_WP_CRON', true);

Как создать собственное событие WP-Cron

Создание собственных задач — стандартная практика для расширения функционала сайта. Рассмотрим пример, как сделать задачу, которая ежедневно будет удалять посты из определённой категории.

Регистрация задачи и расписания

Сначала создадим функцию, которая добавит новое расписание (если нужно) и зарегистрирует событие при активации темы или плагина.

function wpmanual_add_custom_cron_schedule($schedules) {
    // Добавляем расписание раз в 24 часа
    $schedules['daily_custom'] = array(
        'interval' => 86400,
        'display' => 'Раз в день'
    );
    return $schedules;
}
add_filter('cron_schedules', 'wpmanual_add_custom_cron_schedule');

function wpmanual_schedule_custom_event() {
    if (!wp_next_scheduled('wpmanual_daily_cleanup')) {
        wp_schedule_event(time(), 'daily_custom', 'wpmanual_daily_cleanup');
    }
}
add_action('wp', 'wpmanual_schedule_custom_event');

Создание функции-обработчика

Теперь опишем функцию, которая будет вызываться по расписанию и удалять посты из категории с ID 5 (пример):

function wpmanual_daily_cleanup_function() {
    $args = array(
        'category' => 5,
        'post_status' => 'publish',
        'numberposts' => -1
    );
    $posts = get_posts($args);
    foreach ($posts as $post) {
        wp_delete_post($post->ID, true); // Удаляем без возможности восстановления
    }
}
add_action('wpmanual_daily_cleanup', 'wpmanual_daily_cleanup_function');

Практические советы по работе с WP-Cron

Уменьшаем нагрузку и увеличиваем надёжность выполнения

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

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

Обработка ошибок и логирование

Для отладки и контроля полезно вести лог выполнения задач. Добавим простой пример записи в лог файл:

function wpmanual_daily_cleanup_function() {
    $log_file = WP_CONTENT_DIR . '/wp-cron-log.txt';
    $args = array(
        'category' => 5,
        'post_status' => 'publish',
        'numberposts' => -1
    );
    $posts = get_posts($args);
    foreach ($posts as $post) {
        $result = wp_delete_post($post->ID, true);
        $message = date('Y-m-d H:i:s') . " - Удалён пост ID: {$post->ID} - Результат: " . ($result ? 'успешно' : 'ошибка') . "\n";
        file_put_contents($log_file, $message, FILE_APPEND);
    }
}
add_action('wpmanual_daily_cleanup', 'wpmanual_daily_cleanup_function');

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

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

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

Пример вызова API по расписанию:

function wpmanual_fetch_external_data() {
    $response = wp_remote_get('https://api.example.com/data');
    if (is_wp_error($response)) {
        error_log('Ошибка при получении данных: ' . $response->get_error_message());
        return;
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    if ($data) {
        // Обработка и сохранение данных
    }
}
add_action('wpmanual_external_data_fetch', 'wpmanual_fetch_external_data');

if (!wp_next_scheduled('wpmanual_external_data_fetch')) {
    wp_schedule_event(time(), 'hourly', 'wpmanual_external_data_fetch');
}
Как создать адаптивный блок с видео в WordPress с помощью OmniVideo
08.02.2026
WooCommerce: как отключить автоматическое обновление строк заказов для снижения нагрузки
31.05.2026
WooCommerce не работает отправка писем после обновления: диагностика и решение
26.04.2026
WooCommerce: как автоматически удалять неактивные товары через CRON
11.06.2026
Как удалить неиспользуемые шорткоды в WordPress
17.12.2025