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

В WordPress нередко возникает необходимость запускать определённые действия по расписанию: например, очищать кеш, отправлять письма, обновлять данные или выполнять другие рутинные задачи. Для этого используется встроенная система WP-Cron, которая позволяет создавать автоматические задачи (cron jobs) без доступа к системному cron сервера.

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

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

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

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

Основные функции WP-Cron

  • wp_schedule_event() — создает повторяющееся событие в определённый интервал.
  • wp_schedule_single_event() — создает однократное событие.
  • wp_clear_scheduled_hook() — удаляет запланированное событие.
  • add_action() — назначает функцию-обработчик на событие.

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

Рассмотрим пример: нужно каждый час удалять устаревшие записи из пользовательской таблицы. Для этого создадим задачу, которая будет запускаться автоматически.

Сначала регистрируем событие при активации плагина или темы:

function wpengine_schedule_hourly_cleanup() {
    if ( ! wp_next_scheduled( 'wpengine_hourly_cleanup_hook' ) ) {
        wp_schedule_event( time(), 'hourly', 'wpengine_hourly_cleanup_hook' );
    }
}
register_activation_hook( __FILE__, 'wpengine_schedule_hourly_cleanup' );

Здесь мы проверяем, не запланировано ли уже событие wpengine_hourly_cleanup_hook, и если нет — создаём его с интервалом hourly (каждый час).

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

function wpengine_hourly_cleanup_function() {
    global $wpdb;
    $table = $wpdb->prefix . 'my_custom_table';
    $wpdb->query( "DELETE FROM $table WHERE created_at < NOW() - INTERVAL 30 DAY" );
}
add_action( 'wpengine_hourly_cleanup_hook', 'wpengine_hourly_cleanup_function' );

Функция удаляет записи старше 30 дней из таблицы my_custom_table. Она привязана к нашему хук-событию.

Важно также очистить запланированные задачи при деактивации плагина:

function wpengine_deactivate_cleanup() {
    wp_clear_scheduled_hook( 'wpengine_hourly_cleanup_hook' );
}
register_deactivation_hook( __FILE__, 'wpengine_deactivate_cleanup' );

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

По умолчанию WP-Cron поддерживает стандартные интервалы: каждые 1, 2, 3, 6, 12 часов и сутки. Если нужно задать свой интервал — можно добавить его через фильтр cron_schedules.

Например, добавим интервал в 10 минут:

function wpengine_custom_cron_intervals( $schedules ) {
    if ( ! isset( $schedules['every_ten_minutes'] ) ) {
        $schedules['every_ten_minutes'] = array(
            'interval' => 600, // 600 секунд = 10 минут
            'display' => 'Каждые 10 минут'
        );
    }
    return $schedules;
}
add_filter( 'cron_schedules', 'wpengine_custom_cron_intervals' );

Теперь можно использовать этот интервал в функции wp_schedule_event():

wp_schedule_event( time(), 'every_ten_minutes', 'wpengine_custom_hook' );

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

1. Диагностика и отладка задач WP-Cron

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

Если задачи не выполняются, стоит проверить, отключён ли стандартный запуск WP-Cron. В файле wp-config.php не должно быть строки define('DISABLE_WP_CRON', true); или её нужно временно отключить.

2. Настройка системного cron для надежности

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

define('DISABLE_WP_CRON', true);

А на сервере создайте задачу, например, на выполнение каждые 15 минут:

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

3. Оптимизация количества и времени выполнения задач

Не стоит создавать слишком частые задачи без необходимости — это повысит нагрузку на сервер. Объединяйте похожие задачи и старайтесь выполнять тяжелые операции в периоды низкой нагрузки.

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

Пример создания плагина с WP-Cron на wpengine.ru

Для наглядности приведём минимальный пример плагина, который раз в сутки отправляет письмо администратору.

<?php
/**
 * Plugin Name: WPengine Daily Mailer
 * Description: Отправляет ежедневное письмо администратору с напоминанием.
 * Version: 1.0
 * Author: wpengine.ru
 */

function wpengine_schedule_daily_mail() {
    if ( ! wp_next_scheduled( 'wpengine_daily_mail_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wpengine_daily_mail_hook' );
    }
}
register_activation_hook( __FILE__, 'wpengine_schedule_daily_mail' );

function wpengine_send_daily_mail() {
    $admin_email = get_option( 'admin_email' );
    wp_mail( $admin_email, 'Ежедневное напоминание', 'Это письмо отправлено автоматически с помощью WP-Cron.' );
}
add_action( 'wpengine_daily_mail_hook', 'wpengine_send_daily_mail' );

function wpengine_deactivate_daily_mail() {
    wp_clear_scheduled_hook( 'wpengine_daily_mail_hook' );
}
register_deactivation_hook( __FILE__, 'wpengine_deactivate_daily_mail' );

Этот плагин показывает, как просто создавать и удалять задачи через WP-Cron.

Заключение

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

Как использовать хуки и фильтры в WordPress для кастомизации сайта
18.11.2025
Как создать настройки для плагина с хранением в options WordPress
20.12.2025
Как отслеживать и отвечать на ошибки PHP в WordPress
06.12.2025
Как использовать внешние библиотеки в WordPress с примерами
30.11.2025
WordPress: разделение кода для разных устройств — практические решения
30.12.2025