wp_get_scheduled_event() WP 5.1.0

Отримує заплановане wp-cron завдання – дані вказаного завдання як об’єкта.

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

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

Повертає

Объект|false. Об’єкт події. False, якщо події немає.

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

wp_get_scheduled_event($hook, $args, $timestamp);
$hook
(рядок) (обов’язковий)
Назва завдання – WP хук, який буде виконуватися.
$args
(масив)
Параметри, які були вказані під час реєстрації події у функції
wp_schedule_event() . Вони потрібні, щоб достеменно зрозуміти, яке завдання ви хочете отримати – для однозначної ідентифікації завдання.


За замовчуванням: array()
$timestamp
(int|null)

Тимчасова позначка події в Unix (UTC).

Якщо вказати цей параметр , буде отримано завдання із зазначеною часовою міткою.

Якщо не вказати , буде отримано наступне заплановане завдання для вказаної в $hook події.

Типово: null

Приклади

0

#1 Реєстрація подій з перевіркою відповідності cron розкладу.

При першому запуску код реєструє завдання cron.

При повторному запуску перевіряє, чи відповідає інтервал запуску зареєстрованої події, інтервалу часу у вихідному масиві. Якщо інтервал запуску в масиві змінився, код перереєструє подію з новим інтервалом.

$events = ['my_event_name' => 'min'];

foreach ( $events as $event_hook => $event_time ) {

	// отримаємо cron завдання
	$cron_event = wp_get_scheduled_event( $event_hook );

	// Перевіримо, що завдання не заплановане або має інший інтервал
	if (
		( false === $cron_event && '' !== $event_hook )
		 ||
		( is_object($cron_event) && $cron_event->schedule !== $event_time )
	) {
		// видалимо про всяк випадок такі самі завдання cron, щоб додати нові з "чистого листа"
		wp_clear_scheduled_hook ($ event_hook);

		// додамо нове cron завдання
		wp_schedule_event(time(), $event_time, $event_hook);
	}

}
Перевірка роботи скрипта вище, приклад об’єкта, що повертається.
$event_hook = 'my_event_name';
$result = wp_get_scheduled_event( $event_hook );

print_r($result);

Результат:

stdClass Object
(
	[hook] => my_event_name
	[timestamp] => 1636884508
	[schedule] => min
	[args] => Array
		(
		)

	[interval] => 60
)

список змін

З версії 5.1.0Введено.

Код wp_get_scheduled_event() WP 6.0.2

function wp_get_scheduled_event( $hook, $args = array(), $timestamp = null ) {
	/**
	 * Filter to preflight або hijack retrieving a scheduled event.
	 *
	 * Returning a non-null value буде short-circuit the normal process,
	 * Returning the filtered value instead.
	 *
	 * Return false if the event does no exist, otherwise an event object
	 * should be returned.
	 *
	 * @ Since 5.1.0
	 *
	 * @param null|false|object $pre Value to return instead. Default null to continue retrieving the event.
	 * @param string $hook Action hook of the event.
	 * @param array $args Array містить один окремий argument для прослуховування функцій calokback.
	 * Ніколи не пройшли до callback, ці argumenty є використані для uniquely identify
	 * the event.
	 * @param int|null $timestamp Unix timestamp (UTC) of the event. Null to retrieve next scheduled event.
	 */
	$pre = apply_filters( 'pre_get_scheduled_event', null, $hook, $args, $timestamp);
	if ( null !== $pre ) {
		return $pre;
	}

	if ( null !== $timestamp && ! is_numeric( $timestamp ) ) {
		return false;
	}

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

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

	if (! $timestamp) {
		// Get next event.
		$ next = false;
		foreach ( $crons as $timestamp => $cron ) {
			if ( isset( $cron[ $hook ][ $key ] ) ) {
				$next = $timestamp;
				break;
			}
		}
		if (! $ next) {
			return false;
		}

		$timestamp = $next;
	} elseif ( ! isset( $crons[ $timestamp ][ $hook ][ $key ] ) ) {
		return false;
	}

	$event = (object) array(
		'hook' => $hook,
		'timestamp' => $timestamp,
		'schedule' => $crons[ $timestamp ][ $hook ][ $key ]['schedule'],
		'args' => $args,
	);

	if ( isset( $crons[ $timestamp ][ $hook ][ $key ]['interval'] ) ) {
		$event->interval = $crons[ $timestamp ][ $hook ][ $key ]['interval'];
	}

	return $event;
}

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

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