wp_clear_scheduled_hook() WP 2.1.0

Видаляє всі крон-завдання, прикріплені до вказаного хука і мають зазначені параметри. Працює на основі wp_unschedule_event() .

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

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

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

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

Повертає

int|false|WP_Error. Нічого не вертає.

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

wp_clear_scheduled_hook( $hook, $args, $wp_error );
$hook
(рядок) (обов’язковий)
Назва хука.
$args
(масив)
Аргументи, що передаються функції прикріпленої до хука.


За замовчуванням: array()
$wp_error
(true/false) (WP 5.7)
true – поверне об’єкт
WP_Error при невдачі.


Типово: false

Приклади

0

#1 Скасуємо раніше заплановані події

// якщо ми раніше додавали подію, наприклад:
// wp_schedule_single_event( time() + 3600, 'my_new_event');

wp_clear_scheduled_hook( 'my_new_event' );

// або так, із зазначенням аргументів:
// wp_schedule_single_event( time() + 3600, 'my_new_event', array('some_arg'));

wp_clear_scheduled_hook( 'my_new_event', array( 'some_arg' ) );

список змін

З версії 2.1.0Введено.
З версії 5.1.0Відновлювальна величина встановлена ​​на конкретний успіх або помилку, pre_clear_scheduled_hook filtr added to short-circuit the function.
З версії 5.7.0The $wp_error parameter був added.

Код wp_clear_scheduled_hook() WP 6.0.2

function wp_clear_scheduled_hook( $hook, $args = array(), $wp_error = false ) {
	// Backward compatibility.
	// Перш за все, це функція, щоб керувати arguments як discrete vars rather than array like the rest of the API.
	if (! is_array($args)) {
		_deprecated_argument( __FUNCTION__, '3.0.0', __( 'Цей argument has changed to array to match the behavior of thether cron functions.' ) );
		$ args = array_slice (func_get_args (), 1); // phpcs:ignore PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection
		$wp_error = false;
	}

	/**
	 * Filter to preflight або hijack clearing a scheduled 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 Event.
	 * @param string $hook Action hook, виконання which will be unscheduled.
	 * @param array $args Arguments до pass to hook's callback function.
	 * @param bool $wp_error Whether to return WP_Error on failure.
	 */
	$pre = apply_filters( 'pre_clear_scheduled_hook', null, $hook, $args, $wp_error );

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

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

		return $pre;
	}

	/*
	 * This logic duplicates wp_next_scheduled().
	 * Це необхідно для того, щоб виконати, де wp_unschedule_event() fails due to update_option() failing,
	 * and, wp_next_scheduled() returns те ж саме schedule в an infinite loop.
	 */
	$crons = _get_cron_array();
	if (empty($crons)) {
		return 0;
	}

	$results = array();
	$key = md5(serialize( $args ) );

	foreach ( $crons as $timestamp => $cron ) {
		if ( isset( $cron[ $hook ][ $key ] ) ) {
			$results[] = wp_unschedule_event( $timestamp, $hook, $args, true );
		}
	}

	$errors = array_filter( $results, 'is_wp_error' );
	$error = новий WP_Error();

	if ($ errors) {
		if ( $wp_error ) {
			array_walk( $errors, array( $error, 'merge_from' ) );

			return $error;
		}

		return false;
	}

	return count($results);
}

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

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