Удаляет из массива расписания единственное событие, которое:
wp_unschedule_event( $timestamp, $hook, $args = array() )
- $timestamp
- (целое число) Время, в которое событие должно произойти в UNIX-формате. Если указано некорректно (должно быть числовое положительное значение), то функция возвратит
false
, в остальных случаях не возвращает ничего.Если вам нужно получить ближайшее время, в которое будет запущено событие, привязанное к указанному хуку, используйте wp_next_scheduled().
- $hook
- (строка) Название хука. Больше и сказать нечего. Однако могу сослаться на описания функций wp_schedule_single_event() и wp_schedule_event(), где я подробно описывал этот момент с хуками.
- $args
- (массив) Параметры, переданные в хук.
Если вам нужно получить ближайшее время, в которое будет запущено событие, привязанное к указанному хуку, используйте wp_next_scheduled().
А теперь пара примеров для того, чтобы прояснить ситуацию.
1. Удаляем из расписания событие, все данные которого известны: время выполнения, название хука и параметры.
Может так получиться, что все данные события вам уже известны, это может быть в разных случаях (лично у меня такое бывало при интеграции со Stripe). А зная всё о событии, очень легко его удалить.
В этом примере я поступлю проще, при помощи вот такого кода: echo '<pre>' . print_r( get_option( 'cron' ), true ) . '</pre>';
. Отсюда и возьму все данные о событии.
Как видите следующая проверка свежей версии WordPress запланирована на время 1424106216. Запускаем код:
wp_unschedule_event( '1424106216', 'wp_version_check' );
Вставляем его куда угодно, главное удалите после того, как он выполнится. Может показаться, что так как проверка обновлений производится дважды в день (twicedaily), то из расписания удалится только ближайшая утренняя (или какое там у вас время суток) проверка, а вечером она всё же будет запущена. Да ничего подобно, wp_version_check
полностью исчезла из расписания задач.
Давайте объясню — дело в том, что функция удаляет не просто ближайшее событие, а один из элементов массива (вне зависимости от того, повторяющееся ли это событие или нет). Дело в том, что в массиве бывают ещё и такие записи, принадлежащие одному хуку.
Чтобы удалить такое, вам нужно либо несколько раз запускать wp_unschedule_event()
, но лучше воспользоваться функцией wp_clear_scheduled_hook() (напишу про неё на следующей неделе).
2. Отменяем ближайшее событие, привязанное к заданному хуку.
Ну, этот пример есть повсюду, но всё же я считаю, что его стоит лишний раз упомянуть. Так вот, гораздо чаще бывает, что информации о времени выполнения события у нас нет, тогда в ход вступает функция wp_next_scheduled(), которая как раз это время и возвращает. Используем тот же хук, что и в прошлом примере:
wp_unschedule_event( wp_next_scheduled( 'wp_version_check' ), 'wp_version_check' );