wp_get_scheduled_event()WP 5.1.0

Получает запланированную wp-cron задачу - данные указанного задания в виде объекта.

Работает на основе: _get_cron_array()
Основа для: wp_next_scheduled()
Хуки из функции

Возвращает

Объект|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.5.2

function wp_get_scheduled_event( $hook, $args = array(), $timestamp = null ) {
	/**
	 * Filter to override retrieving a scheduled event.
	 *
	 * Returning a non-null value will short-circuit the normal process,
	 * returning the filtered value instead.
	 *
	 * Return false if the event does not 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 containing each separate argument to pass to the hook's callback function.
	 *                                Although not passed to a callback, these arguments are used to 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;
}