WP_GET_SCHEDULED_EVENT() │ WP 5.1.0
Получение Запланированного События
Функция wp_get_scheduled_event()
позволяет получить объект запланированного события. Если не указать временную метку (timestamp), будет возвращено следующее запланированное событие.
Использование
Функция основывается на _get_cron_array()
, и используется в основном с функцией wp_next_scheduled()
.
Хуки Функции
pre_get_scheduled_event
Возвращаемое Значение
Функция возвращает объект события или false
, если событие не существует.
Как Пользоваться Функцией
wp_get_scheduled_event( $hook, $args, $timestamp );
Параметры
$hook
(string): Обязательный параметр. Это название события, для которого вы хотите получить информацию.$args
(array): Массив с аргументами, которые передаются функции обратного вызова. Хотя они не передаются в саму функцию обратного вызова, эти аргументы используются для уникальной идентификации события. По умолчанию это пустой массив.$timestamp
(int|null): Unix временная метка (UTC) события. Если не указана, вернётся следующее запланированное событие. По умолчаниюnull
.
Примеры Использования
Пример 1: Регистрация События с Проверкой Графика
При первом запуске кода он регистрирует задачу в cron. При перезапуске код проверяет, соответствует ли интервал запуска зарегистрированного события времени, указанному в изначальном массиве. Если интервал изменился, событие регистрируется заново.
$events = [ 'my_event_name' => 'min' ];
foreach ( $events as $event_hook => $event_time ) {
// Получаем задачу cron
$cron_event = wp_get_scheduled_event( $event_hook );
// Проверяем, что задача не запланирована или имеет другой интервал
if (
( false === $cron_event && '' !== $event_hook )
||
( is_object($cron_event) && $cron_event->schedule !== $event_time )
) {
// Удаляем все похожие задачи cron, на всякий случай, чтобы добавить новые с "чистого листа"
wp_clear_scheduled_hook( $event_hook );
// Добавляем новую задачу cron
wp_schedule_event( time(), $event_time, $event_hook );
}
}
Проверка Возвращаемого Объекта
Для проверки работы приведённого выше кода можно вывести возвращаемый объект.
$event_hook = 'my_event_name';
$result = wp_get_scheduled_event( $event_hook );
print_r( $result );
Результат:
stdClass Object
(
[hook] => my_event_name
[timestamp] => 1636884508
[schedule] => min
[args] => Array
(
)
[interval] => 60
)
Пример 2: Удаление Ненужного События
Если событие больше не требуется, его можно удалить следующим образом:
if ( false !== wp_get_scheduled_event( 'old_hook' ) ) {
wp_clear_scheduled_hook( 'old_hook' );
}
Изменения
Функция была добавлена в версии 5.1.0.
Код Функции
Ниже представлен код реализации функции wp_get_scheduled_event()
.
function wp_get_scheduled_event( $hook, $args = array(), $timestamp = null ) {
$pre = apply_filters( 'pre_get_scheduled_event', null, $hook, $args, $timestamp );
if ( null !== $pre ) {
return $pre;
}
if ( null !== $timestamp && ! is_numeric( $timestamp ) ) {
return false;
}
$crons = _get_cron_array();
if ( empty( $crons ) ) {
return false;
}
$key = md5( serialize( $args ) );
if ( ! $timestamp ) {
// Получаем следующее событие
$next = false;
foreach ( $crons as $timestamp => $cron ) {
if ( isset( $cron[ $hook ][ $key ] ) ) {
$next = $timestamp;
break;
}
}
if ( ! $next ) {
return false;
}
$timestamp = $next;
} elseif ( ! isset( $crons[ $timestamp ][ $hook ][ $key ] ) ) {
return false;
}
$event = (object) array(
'hook' => $hook,
'timestamp' => $timestamp,
'schedule' => $crons[ $timestamp ][ $hook ][ $key ]['schedule'],
'args' => $args,
);
if ( isset( $crons[ $timestamp ][ $hook ][ $key ]['interval'] ) ) {
$event->interval = $crons[ $timestamp ][ $hook ][ $key ]['interval'];
}
return $event;
}
Сопутствующие Функции
do_enclose()
wp_clear_scheduled_hook()
wp_cron()
wp_doing_cron()
wp_get_schedules()
wp_next_scheduled()
wp_schedule_event()
wp_schedule_single_event()
wp_unschedule_event()
wp_unschedule_hook()
Эта информация поможет вам лучше понять, как использовать функцию wp_get_scheduled_event()
в WordPress.