Получение Запланированного События в WordPress 5.1.0

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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *