WP-Cron — это встроенная в WordPress система планировщика задач, которая позволяет запускать определённые действия в заданное время или с определённым интервалом. В отличие от стандартного cron на сервере, WP-Cron работает на уровне WordPress и запускается при обращении пользователей к сайту. В этой статье мы подробно разберём, как правильно использовать WP-Cron для автоматизации рутинных задач, рассмотрим примеры кода, а также дадим советы по отладке и оптимизации.
Что такое WP-Cron и как он работает
WP-Cron — это механизм имитации системного планировщика задач, который запускает события по расписанию. Однако запуск происходит не по времени на сервере, а при загрузке страницы пользователем. Если на сайт долго не заходят, задачи могут не выполниться вовремя, поэтому для сайтов с низкой посещаемостью рекомендуется использовать системный cron для вызова wp-cron.php.
Основные возможности WP-Cron:
- Запуск одноразовых и повторяющихся задач.
- Добавление пользовательских событий.
- Связь с хуками и фильтрами для расширения функционала.
WP-Cron может использоваться для отправки рассылок, очистки базы, обновления данных и многих других задач.
Добавление пользовательского события в WP-Cron
Для добавления своих задач нужно зарегистрировать событие и функцию-обработчик. Рассмотрим пример, как добавить задачу, которая будет выполняться раз в час и очищать временные данные.
Регистрация события и планирование
function wp_pro_schedule_clear_temp_data() {
if ( ! wp_next_scheduled( 'wp_pro_clear_temp_event' ) ) {
wp_schedule_event( time(), 'hourly', 'wp_pro_clear_temp_event' );
}
}
add_action( 'wp', 'wp_pro_schedule_clear_temp_data' );
function wp_pro_clear_temp_function() {
global $wpdb;
$table = $wpdb->prefix . 'temp_data';
$wpdb->query( "DELETE FROM $table WHERE created_at < NOW() - INTERVAL 1 DAY" );
}
add_action( 'wp_pro_clear_temp_event', 'wp_pro_clear_temp_function' );
В этом коде мы проверяем, запланировано ли событие, и если нет — планируем его с интервалом hourly. Затем к событию привязываем функцию очистки.
Создание своего интервала расписания
По умолчанию WP-Cron поддерживает такие интервалы: hourly, twicedaily, daily. Если нужно, например, выполнение каждые 10 минут, добавим свой интервал:
function wp_pro_custom_cron_intervals( $schedules ) {
$schedules['every_ten_minutes'] = array(
'interval' => 600, // 600 секунд = 10 минут
'display' => 'Каждые 10 минут'
);
return $schedules;
}
add_filter( 'cron_schedules', 'wp_pro_custom_cron_intervals' );
Далее при планировании события указываем новый интервал every_ten_minutes.
Отмена и изменение расписания WP-Cron
Если нужно остановить запланированное событие или изменить интервал, используйте функции wp_clear_scheduled_hook() и wp_reschedule_event(). Пример удаления запланированной задачи:
function wp_pro_remove_clear_temp_schedule() {
$timestamp = wp_next_scheduled( 'wp_pro_clear_temp_event' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'wp_pro_clear_temp_event' );
}
}
Это полезно при деактивации плагина или изменении логики работы.
Отладка и мониторинг выполнения WP-Cron задач
Поскольку WP-Cron связан с посещениями сайта, иногда задачи не выполняются вовремя. Для контроля можно использовать плагины, например, WP Crontrol, который позволяет просматривать, редактировать и запускать задачи вручную.
Также полезно логировать выполнение задач. Например, добавим запись в лог при запуске функции очистки:
function wp_pro_clear_temp_function() {
global $wpdb;
$table = $wpdb->prefix . 'temp_data';
$deleted = $wpdb->query( "DELETE FROM $table WHERE created_at < NOW() - INTERVAL 1 DAY" );
if ( defined('WP_DEBUG') && WP_DEBUG ) {
error_log( "[WP-Cron] Удалено $deleted записей из temp_data" );
}
}
Использование системного cron для вызова WP-Cron
Для сайтов с низкой посещаемостью рекомендуется отключить стандартный WP-Cron запуск и настроить системный cron на сервере, который будет вызывать wp-cron.php по расписанию.
В wp-config.php добавьте:
define('DISABLE_WP_CRON', true);
Затем в панели хостинга или через SSH добавьте задание:
*/15 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Это запустит задачи каждые 15 минут.
Полезные плагины для работы с WP-Cron
- WP Crontrol — управление и отладка задач WP-Cron через админку.
- Clearfy Pro — оптимизация и управление производительностью, включая управление WP-Cron.
Заключение
WP-Cron — мощный инструмент для автоматизации задач на WordPress, позволяющий запускать фоновые процессы без сторонних сервисов. Важно понимать его особенности и ограничения, особенно связанные с запуском по трафику. Используйте системный cron для надёжности, добавляйте собственные интервалы и логирование, а для удобства — плагины для управления и мониторинга. Таким образом вы сможете эффективно автоматизировать рутинные процессы и улучшить работу сайта.