В WordPress встроена система крон-задач, которая позволяет запускать запланированные задачи в определённое время. По умолчанию, WordPress поддерживает несколько стандартных расписаний, таких как ежечасное, ежедневно и дважды в день. Однако иногда может возникнуть необходимость в создании собственного пользовательского расписания для выполнения задач через определённые интервалы времени.
Фильтр cron_schedules
позволяет добавить новые интервалы для крон-задач. В этой статье мы рассмотрим, как это сделать, и предоставим пример добавления нового расписания.
Что такое cron_schedules
?
Фильтр cron_schedules
в WordPress позволяет разработчикам изменить список доступных интервалов выполнения задач. Это полезно, если вам нужно добавить собственный интервал, отличный от стандартных (например, каждые 5 минут или раз в месяц).
Как работает cron_schedules
?
Фильтр принимает массив существующих расписаний и позволяет вам добавить в него собственные варианты. Каждый интервал имеет два параметра:
interval
— время в секундах между задачами.display
— название интервала, которое отображается для администратора или разработчика.
Пример: Добавление пользовательского интервала
Давайте рассмотрим, как добавить собственное расписание, которое будет запускать задачи каждые 5 минут.
Шаг 1: Добавление кода через фильтр cron_schedules
// Добавляем новое расписание через фильтр 'cron_schedules'
add_filter( 'cron_schedules', 'custom_cron_schedule' );
/**
* Добавляет новый интервал в крон-задачи.
*
* @param array $schedules Существующие расписания крон-задач.
* @return array Модифицированный массив с пользовательскими интервалами.
*/
function custom_cron_schedule( $schedules ) {
// Добавляем расписание каждые 5 минут
$schedules['every_five_minutes'] = array(
'interval' => 300, // 5 минут = 300 секунд
'display' => __( 'Каждые 5 минут' )
);
return $schedules;
}
Этот код добавляет новый интервал every_five_minutes
, который будет доступен для назначения крон-задачам.
Шаг 2: Регистрация крон-задачи
Теперь, когда у нас есть новое расписание, давайте создадим задачу, которая будет выполняться каждые 5 минут.
// Хук для регистрации крон-задачи при активации плагина или темы
add_action( 'wp', 'custom_cron_activation' );
/**
* Планируем запуск задачи, если она еще не запланирована.
*/
function custom_cron_activation() {
if ( ! wp_next_scheduled( 'custom_five_minute_event' ) ) {
wp_schedule_event( time(), 'every_five_minutes', 'custom_five_minute_event' );
}
}
// Хук для выполнения задачи
add_action( 'custom_five_minute_event', 'custom_five_minute_task' );
/**
* Функция, которая будет выполняться каждые 5 минут.
*/
function custom_five_minute_task() {
// Ваш код, который нужно выполнять каждые 5 минут
error_log( 'Задача выполнена: ' . current_time( 'mysql' ) );
}
Шаг 3: Удаление задачи при деактивации
Важно очищать запланированные задачи при деактивации плагина или темы, чтобы они не оставались в расписании WordPress.
// Хук для удаления крон-задачи при деактивации плагина или темы
register_deactivation_hook( __FILE__, 'custom_cron_deactivation' );
/**
* Удаляем запланированную задачу.
*/
function custom_cron_deactivation() {
$timestamp = wp_next_scheduled( 'custom_five_minute_event' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'custom_five_minute_event' );
}
}
Как проверить выполнение задачи
Чтобы убедиться, что ваша задача работает, вы можете просматривать логи ошибок сервера. В нашем примере каждые 5 минут будет добавляться запись в лог через функцию error_log
.