Получение следующего времени события в WordPress: функция wp_next_scheduled()

WP_NEXT_SCHEDULED() │ WP 2.1.0

Получение следующего времени события

Функция wp_next_scheduled() позволяет получить следующий временной штамп (timestamp) для запланированного события. Эта функция удобна для работы с задачами на cron в WordPress.

Как это работает

Функция использует wp_get_scheduled_event(), чтобы извлечь информацию о запланированном событии.

Использование

wp_next_scheduled( $hook, $args );
  • $hook (строка, обязательный): Это "крючок" (action hook), обозначающий событие.
  • $args (массив): Это массив аргументов, которые передаются в колбэк-функцию события. Эти аргументы не передаются в колбэк, но используются для уникальной идентификации события, поэтому должны совпадать с теми, которые использовались при планировании события. По умолчанию – это пустой массив.

Возвращаемое значение

  • Int|false: Если событие существует, функция вернёт Unix-метку времени следующего выполнения события. В противном случае — false.

Примеры использования

Пример 1: Проверка на наличие задачи перед регистрацией новой

Обычно события регистрируются при активации плагина, но это не всегда удобно.

// Убедитесь, что события не существует, прежде чем регистрировать новую задачу cron
if ( ! wp_next_scheduled( 'my_hourly_event' ) ) {
    wp_schedule_event( time(), 'hourly', 'my_hourly_event' );
}

// Добавить функцию к указанному крючку
add_action( 'my_hourly_event', 'do_this_hourly' );

function do_this_hourly() {
    // Делаем что-то каждый час
}

Смотрите wp_schedule_event(), чтобы узнать больше о других примерах.

Пример 2: Обратите внимание на параметр $args!

Если не указать параметр $args в wp_next_scheduled(), но он есть в wp_schedule_event(), то может быть запланировано множество событий, а не одно.

Плохой пример:

// Это всегда будет false
if ( ! wp_next_scheduled( 'myevent' ) ) {
    wp_schedule_event( time(), 'daily', 'myevent', array( false ) );
}

Хороший пример:

$args = array( false );
if ( ! wp_next_scheduled( 'myevent', $args ) ) {
    wp_schedule_event( time(), 'daily', 'myevent', $args );
}

Пример 3: Будьте осторожны с аргументами!

WordPress не сравнивает аргументы на 1:1, поэтому важно следить за тем, какого они типа.

Это вызвано тем, что WP генерирует хэш из них: md5( serialize( $args ) ).

Таким образом, следующая проверка может работать непра��ильно, и могут быть добавлены много событий, а не только одно:

if( ! wp_next_scheduled( 'action_hook', array( '123' ) ) ) {
    wp_schedule_event( time(), 'daily', 'action_hook', array( 123 ) );
}

Хранение кода wp_next_scheduled

Вот как реализована функция wp_next_scheduled в WordPress:

function wp_next_scheduled( $hook, $args = array() ) {
    $next_event = wp_get_scheduled_event( $hook, $args );

    if ( ! $next_event ) {
        return false;
    }

    return $next_event->timestamp;
}

Заключение

Функция wp_next_scheduled() полезна для управления запланированными событиями в WordPress. Помните о корректной передаче аргументов, чтобы избежать дублирования событий. Используйте её для автоматизации задач и оптимизации работы вашего сайта.

Leave a Reply

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