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

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

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

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

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

Примеры задач, которые удобно автоматизировать с помощью WP-Cron:

  • Очистка временных данных и кеша
  • Отправка рассылок и уведомлений
  • Автоматическое обновление внешних данных
  • Создание резервных копий и другие сервисные задачи

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

Для взаимодействия с WP-Cron WordPress предоставляет набор функций. Рассмотрим ключевые из них:

  • wpgenerate_schedule_event() — наша функция для добавления нового задания в расписание.
  • wpgenerate_cron_hook() — функция-обработчик, которая вызывается по расписанию.
  • wp_schedule_event() — стандартная функция WP для регистрации периодического события.
  • wp_clear_scheduled_hook() — удаляет запланированное событие.

Далее мы подробно разберём, как их использовать на практике.

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

Создадим пример: пусть нам нужно выполнять функцию очистки временных файлов каждые 12 часов.

Шаг 1. Добавляем интервал 12 часов в расписание

По умолчанию WordPress поддерживает интервалы: hourly, twicedaily, daily. Для 12 часов подойдёт twicedaily, но если нужен свой уникальный интервал, можно добавить его так:

add_filter('cron_schedules', 'wpgenerate_add_custom_cron_interval');
function wpgenerate_add_custom_cron_interval($schedules) {
    if (!isset($schedules['twelve_hours'])) {
        $schedules['twelve_hours'] = array(
            'interval' => 12 * 60 * 60, // 12 часов в секундах
            'display' => __('Каждые 12 часов')
        );
    }
    return $schedules;
}

Шаг 2. Регистрируем задание при активации плагина или темы

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

function wpgenerate_schedule_event() {
    if (!wp_next_scheduled('wpgenerate_twice_daily_event')) {
        wp_schedule_event(time(), 'twelve_hours', 'wpgenerate_twice_daily_event');
    }
}
add_action('wp', 'wpgenerate_schedule_event');

Здесь 'wpgenerate_twice_daily_event' — уникальное имя нашего события.

Шаг 3. Создаём функцию-обработчик события

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

add_action('wpgenerate_twice_daily_event', 'wpgenerate_clear_temp_files');
function wpgenerate_clear_temp_files() {
    // Здесь логика очистки временных файлов
    $temp_dir = wp_upload_dir()['basedir'] . '/temp/';
    if (is_dir($temp_dir)) {
        $files = glob($temp_dir . '*');
        foreach ($files as $file) {
            if (is_file($file)) {
                unlink($file);
            }
        }
    }
}

Таким образом, каждые 12 часов будет запускаться функция очистки временных файлов.

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

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

  • Плагин WP Crontrol — позволяет просматривать, изменять и запускать задания вручную.
  • Выводить логи выполнения с помощью функции error_log() внутри обработчика.
  • Для отладки можно принудительно запустить задание с помощью PHP-кода: do_action('wpgenerate_twice_daily_event');

Если задания не выполняются, проверьте, что в настройках сервера не отключен wp-cron.php, и что нет конфликтов с другими плагинами.

Как удалить или изменить расписание задания

Если нужно остановить выполнение задания, используйте функцию wp_clear_scheduled_hook():

function wpgenerate_clear_scheduled_event() {
    wp_clear_scheduled_hook('wpgenerate_twice_daily_event');
}
// Можно привязать к деактивации плагина
register_deactivation_hook(__FILE__, 'wpgenerate_clear_scheduled_event');

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

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

Автоматическая очистка базы данных от ревизий и спама

Регулярная очистка базы данных помогает ускорить сайт и снизить нагрузку. Пример кода:

add_action('wpgenerate_cleanup_database_event', 'wpgenerate_cleanup_database');
function wpgenerate_cleanup_database() {
    global $wpdb;
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
    $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
}

Такую функцию можно запускать раз в неделю.

Автоматическая отправка email-отчётов

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

add_action('wpgenerate_send_report_event', 'wpgenerate_send_report');
function wpgenerate_send_report() {
    $to = get_option('admin_email');
    $subject = 'Еженедельный отчет сайта';
    $message = 'Статистика за неделю: ...';
    wp_mail($to, $subject, $message);
}

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

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

add_action('wpgenerate_update_external_data_event', 'wpgenerate_update_external_data');
function wpgenerate_update_external_data() {
    $response = wp_remote_get('https://api.example.com/data');
    if (is_wp_error($response)) {
        return;
    }
    $data = json_decode(wp_remote_retrieve_body($response), true);
    // Обработка и сохранение данных
}

Заключение

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

Как автоматически удалять неиспользуемые категории в WordPress
31.01.2026
WooCommerce: автоматическое удаление неактивных заказов по статусу и времени
09.06.2026
WooCommerce: автоматическое создание отзывов после покупки
23.05.2026
WooCommerce: как автоматически удалять неактивные вариации товаров с помощью кода
05.07.2026
Как добавить собственные типы постов в WordPress с примерами
03.12.2025