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' );

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.