Функция wp_get_schedules()
в WordPress возвращает список всех зарегистрированных интервалов времени для Cron-задач. Эти интервалы используются для планирования повторяющихся задач через функции, такие как wp_schedule_event()
. По умолчанию WordPress поддерживает такие интервалы, как ‘hourly’ (ежечасно), ‘twicedaily’ (два раза в день), ‘daily’ (ежедневно), и ‘weekly’ (еженедельно), но разработчики могут добавлять свои интервалы через фильтр cron_schedules
.
wp_get_schedules(): array
Возвращаемое значение
Функция возвращает ассоциативный массив с информацией о каждом зарегистрированном интервале. Каждый элемент массива содержит:
- interval — интервал времени в секундах, через который выполняется задание.
- display — текстовое описание интервала.
Пример возвращаемого значения
Array
(
[hourly] => Array
(
[interval] => 3600
[display] => 'Once Hourly'
)
[twicedaily] => Array
(
[interval] => 43200
[display] => 'Twice Daily'
)
[daily] => Array
(
[interval] => 86400
[display] => 'Once Daily'
)
)
Как использовать wp_get_schedules()
?
Функция полезна, когда нужно просмотреть доступные интервалы времени для планирования задач. Например, вы можете вывести список всех зарегистрированных интервалов, чтобы пользователь мог выбрать нужный:
$schedules = wp_get_schedules();
echo '<pre>';
print_r( $schedules );
echo '</pre>';
Этот код выведет на экран массив с информацией о всех зарегистрированных интервалах времени, включая стандартные и добавленные сторонними плагинами.
Добавление нового интервала
WordPress позволяет разработчикам добавлять собственные интервалы для Cron через фильтр cron_schedules
. Например, можно добавить интервал для повторения задачи раз в месяц.
Пример добавления месячного интервала
add_filter( 'cron_schedules', 'add_monthly_schedule' );
function add_monthly_schedule( $schedules ) {
$schedules['monthly'] = array(
'interval' => 30 * 24 * 60 * 60, // 30 дней в секундах
'display' => __( 'Once Monthly' )
);
return $schedules;
}
В этом примере мы добавляем интервал monthly
, который будет срабатывать раз в 30 дней.
Пример использования нового интервала
После того, как новый интервал добавлен через фильтр, его можно использовать в функциях планирования задач:
if ( ! wp_next_scheduled( 'my_monthly_event' ) ) {
wp_schedule_event( time(), 'monthly', 'my_monthly_event' );
}
add_action( 'my_monthly_event', 'do_this_monthly' );
function do_this_monthly() {
// Ваши действия, которые будут выполняться ежемесячно
error_log( 'Monthly event triggered!' );
}
Теперь, если интервал monthly
будет добавлен, функция do_this_monthly
будет запускаться каждый месяц.
Расширенные примеры
1. Добавление кастомного интервала для двухнедельного задания
Допустим, вам нужно создать интервал, который запускается раз в две недели (каждые 14 дней). Для этого можно использовать следующий код:
add_filter( 'cron_schedules', 'add_biweekly_schedule' );
function add_biweekly_schedule( $schedules ) {
$schedules['biweekly'] = array(
'interval' => 14 * 24 * 60 * 60, // 14 дней в секундах
'display' => __( 'Once Every Two Weeks' )
);
return $schedules;
}
После добавления интервала можно планировать задачи с использованием этого интервала:
if ( ! wp_next_scheduled( 'my_biweekly_event' ) ) {
wp_schedule_event( time(), 'biweekly', 'my_biweekly_event' );
}
add_action( 'my_biweekly_event', 'do_this_biweekly' );
function do_this_biweekly() {
// Ваши действия, которые будут выполняться каждые две недели
error_log( 'Biweekly event triggered!' );
}
2. Проверка доступных интервалов и их вывод на экран
Иногда полезно динамически выводить доступные интервалы, чтобы пользователь мог выбрать один из них:
$schedules = wp_get_schedules();
echo '<select name="schedule_interval">';
foreach ( $schedules as $key => $schedule ) {
echo '<option value="' . esc_attr( $key ) . '">' . esc_html( $schedule['display'] ) . '</option>';
}
echo '</select>';
Этот код создаст выпадающий список с возможностью выбора одного из зарегистрированных интервалов для дальнейшего использования.
Заключение
Функция wp_get_schedules()
— мощный инструмент для работы с Cron-задачами в WordPress. Она позволяет не только просматривать доступные интервалы, но и добавлять новые, расширяя функциональность стандартных расписаний. Используя фильтр cron_schedules
, разработчики могут легко кастомизировать повторяющиеся задачи в своих плагинах и темах, что делает эту функцию очень гибкой и полезной.