wp_unschedule_hook() WP 4.9.0

Видаляє з розкладу крон абсолютно всі крон завдання по вказаному хуку. Тут не має значення які параметри були вказані при реєстрації завдання.

Зручно використовувати плагіни, коли при деактивації потрібно очистити всі заплановані крон завдання.

Функція схожа на wp_unschedule_event() . Різниця між ними в тому, що ця функція видаляє всі cron події разом, потрібно лише вказати назву хука, до якого були прикріплені події, а wp_unschedule_event() видаляє тільки одну cron завдання і до того ж потрібно вказати параметри функції, що передаються, якщо вони були вказані під час реєстрації крон-завдання.

Функція майже ідентична wp_clear_scheduled_hook() , тільки простіше, тут потрібно вказати тільки назву хука і будуть видалені всі завдання повністю. Тоді як в wp_clear_scheduled_hook() потрібно вказати назву хука і аргументи функції, що передаються, якщо вони були вказані при реєстрації крон-завдання і тоді будуть видалені тільки відповідні крон завдання.

Докладніше про видалення крон завдань: WP Cron (планувальник) у WordPress

Працює на основі:
_set_cron_array()

Хуки з функції

Повертає

int|false|WP_Error.

  • Число— при успішному виконанні показує кількість скасованих подій.
  • 0– Вказує, що події не були зареєстровані для хука.
  • false— означає, що скасування (видалення з розкладу) провалилося.

Використання

wp_unschedule_hook( $hook, $wp_error );
$hook
(рядок) (обов’язковий)
Назву події (хуку) виконання якої потрібно прибрати з розкладу крона.
$wp_error
(true/false) (WP 5.7)
true – поверне об’єкт
WP_Error при невдачі.


Типово: false

Приклади

0

#1 Скасуємо всі крон події у хука

wp_unschedule_hook( 'my_hourly_event' );
0

#2 Скасуємо всі крон події, при деактивації плагіна

// при деактивації плагіна, скасовуємо раніше створене завдання
register_deactivation_hook( __FILE__, 'my_deactivation');
function my_deactivation() {
	wp_unschedule_hook( 'my_hourly_event' );
}

// Додамо завдання при активації плагіна
register_activation_hook( __FILE__, 'my_activation' );
function my_activation() {
	// видалимо про всяк випадок такі самі завдання cron, щоб додати нові з "чистого листа"
	// це може знадобитися, якщо до цього підключалася така ж задача неправильно (без перевірки, що вона вже є)
	wp_unschedule_hook( 'my_hourly_event' );

	// додамо нове cron завдання
	wp_schedule_event( time(), 'hourly', 'my_hourly_event');
}

список змін

З версії 4.9.0Введено.
З версії 5.1.0Return value added to indicate success or failure.
З версії 5.7.0The $wp_error parameter був added.

Код wp_unschedule_hook() WP 6.0.2

function wp_unschedule_hook( $hook, $wp_error = false ) {
	/**
	 * Filter to preflight або hijack clearing all events attached to the hook.
	 *
	 * Returning a non-null value буде short-circuit the normal unscheduling
	 * процеси, що викликають функцію до відновлення фільтрованого значення instead.
	 *
	 * Для plugins replacing wp-cron, return number of events successfully
	 * unscheduled (zero if no events були registered with the hook) or false
	 * if unscheduling one or more events fails.
	 *
	 * @ Since 5.1.0
	 * @since 5.7.0 The `$wp_error` parameter був added, and a `WP_Error` object can now be returned.
	 *
	 * @param null|int|false|WP_Error $pre Value to return instead. Default null to continue unscheduling the hook.
	 * @param string $hook Action hook, виконання which will be unscheduled.
	 * @param bool $wp_error Whether to return WP_Error on failure.
	 */
	$pre = apply_filters( 'pre_unschedule_hook', null, $hook, $wp_error );

	if ( null !== $pre ) {
		if ( $wp_error && false === $pre ) {
			return new WP_Error(
				'pre_unschedule_hook_false',
				__( 'A plugin prevented the hook from being cleared.' )
			);
		}

		if ( ! $wp_error && is_wp_error( $pre ) ) {
			return false;
		}

		return $pre;
	}

	$crons = _get_cron_array();
	if (empty($crons)) {
		return 0;
	}

	$results = array();
	foreach ( $crons as $timestamp => $args ) {
		if ( ! empty( $crons[ $timestamp ][ $hook ] ) ) {
			$results[] = count( $crons[ $timestamp ][ $hook ] );
		}
		unset( $crons[ $timestamp ][ $hook ] );

		if ( empty( $crons[ $timestamp ] ) ) {
			unset($crons[$timestamp]);
		}
	}

	/*
	 * Якщо результати є empty (zero events to unschedule), не attempt
	 * update the cron array is required.
	 */
	if ( empty( $results ) ) {
		return 0;
	}

	$set = _set_cron_array($crons, $wp_error);

	if ( true === $set ) {
		return array_sum($results);
	}

	return $set;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *