wp_unschedule_event() — удаляет указанное событие из расписания

Удаляет из массива расписания единственное событие, которое:

  • должно выполниться в указанное в параметре $timestamp время,
  • привязано к хуку $hook,
  • имеет дополнительные параметры, заданные в массиве $args (или не имеет параметров вообще).
wp_unschedule_event( $timestamp, $hook, $args = array() )
$timestamp
(целое число) Время, в которое событие должно произойти в UNIX-формате. Если указано некорректно (должно быть числовое положительное значение), то функция возвратит false, в остальных случаях не возвращает ничего.
Если вам нужно получить ближайшее время, в которое будет запущено событие, привязанное к указанному хуку, используйте wp_next_scheduled().
$hook
(строка) Название хука. Больше и сказать нечего. Однако могу сослаться на описания функций wp_schedule_single_event() и wp_schedule_event(), где я подробно описывал этот момент с хуками.
$args
(массив) Параметры, переданные в хук.

А теперь пара примеров для того, чтобы прояснить ситуацию.

1. Удаляем из расписания событие, все данные которого известны: время выполнения, название хука и параметры.

Может так получиться, что все данные события вам уже известны, это может быть в разных случаях (лично у меня такое бывало при интеграции со Stripe). А зная всё о событии, очень легко его удалить.

В этом примере я поступлю проще, при помощи вот такого кода: echo '<pre>' . print_r( get_option( 'cron' ), true ) . '</pre>';. Отсюда и возьму все данные о событии.

Задача проверки версии WordPress wp_version_check

Как видите следующая проверка свежей версии WordPress запланирована на время 1424106216. Запускаем код:

wp_unschedule_event( '1424106216', 'wp_version_check' );

Вставляем его куда угодно, главное удалите после того, как он выполнится. Может показаться, что так как проверка обновлений производится дважды в день (twicedaily), то из расписания удалится только ближайшая утренняя (или какое там у вас время суток) проверка, а вечером она всё же будет запущена. Да ничего подобно, wp_version_check полностью исчезла из расписания задач.

Давайте объясню — дело в том, что функция удаляет не просто ближайшее событие, а один из элементов массива (вне зависимости от того, повторяющееся ли это событие или нет). Дело в том, что в массиве бывают ещё и такие записи, принадлежащие одному хуку.

Несколько запланированных событий do_pings

Чтобы удалить такое, вам нужно либо несколько раз запускать wp_unschedule_event(), но лучше воспользоваться функцией wp_clear_scheduled_hook() (напишу про неё на следующей неделе).

2. Отменяем ближайшее событие, привязанное к заданному хуку.

Ну, этот пример есть повсюду, но всё же я считаю, что его стоит лишний раз упомянуть. Так вот, гораздо чаще бывает, что информации о времени выполнения события у нас нет, тогда в ход вступает функция wp_next_scheduled(), которая как раз это время и возвращает. Используем тот же хук, что и в прошлом примере:

wp_unschedule_event( wp_next_scheduled( 'wp_version_check' ), 'wp_version_check' );

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: