Функция wp_get_scheduled_event()
в WordPress предназначена для получения данных о запланированных событиях WP-Cron. Она возвращает объект события, если событие запланировано, или false
, если его не существует. Это полезный инструмент для проверки и управления задачами, которые запускаются по расписанию.
wp_get_scheduled_event( string $hook, array $args = array(), int|null $timestamp = null ): object|false
Параметры
- $hook (строка, обязательный)
Имя хука, который связан с событием. Это уникальный идентификатор события. - $args (массив, необязательный)
Массив аргументов, используемых для идентификации события. Аргументы должны совпадать с теми, что использовались при регистрации задачи черезwp_schedule_event()
. Если аргументы заданы, они будут использоваться для поиска конкретного события с соответствующими параметрами. - $timestamp (int|null, необязательный)
Временная метка (Unix) для поиска события. Если не указана, будет возвращено ближайшее запланированное событие для данного хука.
Возвращаемое значение
- Объект события (object) или false. Если событие найдено, возвращается объект, содержащий информацию о событии, включая хук, временную метку, расписание, аргументы и интервал. Если событие не существует, возвращается
false
.
Пример 1: Проверка и обновление WP-Cron задачи
Этот пример проверяет наличие запланированной задачи и обновляет её расписание, если оно изменилось.
$event_hooks = [ 'my_custom_hook' => 'hourly' ];
foreach ( $event_hooks as $event_hook => $event_time ) {
// Получаем информацию о запланированном событии
$cron_event = wp_get_scheduled_event( $event_hook );
// Если событие не запланировано или его расписание не соответствует заданному
if (
( false === $cron_event && !empty($event_hook) )
||
( is_object($cron_event) && $cron_event->schedule !== $event_time )
) {
// Удаляем старые события с тем же хуком
wp_clear_scheduled_hook( $event_hook );
// Регистрируем новое событие с обновленным расписанием
wp_schedule_event( time(), $event_time, $event_hook );
}
}
В этом примере мы проверяем существующую задачу с хуком 'my_custom_hook'
. Если она не запланирована или её расписание изменилось, она будет удалена и зарегистрирована заново.
Пример 2: Получение информации о конкретном событии
Этот пример возвращает объект запланированного события и выводит его для дальнейшего анализа.
$event_hook = 'my_custom_hook';
$scheduled_event = wp_get_scheduled_event( $event_hook );
if ( $scheduled_event ) {
print_r( $scheduled_event );
} else {
echo 'Событие не запланировано.';
}
Если событие найдено, результат может выглядеть так:
stdClass Object
(
[hook] => my_custom_hook
[timestamp] => 1700000000
[schedule] => hourly
[args] => Array
(
)
[interval] => 3600
)
Здесь мы видим, что событие с хуком 'my_custom_hook'
запланировано для выполнения ежечасно (schedule: ‘hourly’) с интервалом 3600 секунд.
Пример 3: Использование аргументов для поиска задачи
Если при регистрации задачи использовались аргументы, они должны быть указаны в вызове wp_get_scheduled_event()
. Этот пример показывает, как искать событие с заданными аргументами.
$event_hook = 'custom_hook_with_args';
$args = [ 'post_id' => 42 ];
$scheduled_event = wp_get_scheduled_event( $event_hook, $args );
if ( $scheduled_event ) {
echo 'Событие найдено:';
print_r( $scheduled_event );
} else {
echo 'Событие не запланировано с указанными аргументами.';
}
Здесь, если событие с аргументами не найдено, функция вернёт false
.
Заключение
Функция wp_get_scheduled_event()
— это мощный инструмент для управления и мониторинга запланированных задач в WordPress. Она позволяет проверять наличие событий, получать подробную информацию о них и обновлять задачи при необходимости.