WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Купить персональные IPV4 и IPV6 прокси

wp_reschedule_event() WP 2.1.0

Создает новую крон задачу со сдвигом времени выполнения на указанный интервал.

Функция не удаляет текущую задачу если она есть, а просто создает еще одну и по сути является внутренней функцией WordPress, когда нужно создать следующее событие после того, как выполнено текущее.

Функция по сути является всего лишь оберткой для wp_schedule_event() в пересчетом $timestamp

Работает на основе: wp_schedule_event()
Хуки из функции
Возвращает

false/null. False если работа не дошла до функции wp_schedule_event(), если дошла, то всегда возвращает null

Использование

wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array() );
$timestamp(число) (обязательный)
Начальная метка времени, с которой хук начнет работать.
$recurrence(строка) (обязательный)
Интервал повторения. Как часто должно повторяться действие.
$hook(строка) (обязательный)
Название хука, который нужно выполнять.
$args(массив)
Аргументы, которые нужно передать в выполняемый хук.
Default: array()

Подробное описание параметров и примеры смотрите в описании функции wp_schedule_event()

Список изменений

С версии 2.1.0 Введена.
С версии 5.1.0 Return value modified to boolean indicating success or failure, 'pre_reschedule_event' filter added to short-circuit the function.

Код wp reschedule event: wp-includes/cron.php WP 5.2.2

<?php
function wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array() ) {
	// Make sure timestamp is a positive integer
	if ( ! is_numeric( $timestamp ) || $timestamp <= 0 ) {
		return false;
	}

	$schedules = wp_get_schedules();
	$interval  = 0;

	// First we try to get the interval from the schedule.
	if ( isset( $schedules[ $recurrence ] ) ) {
		$interval = $schedules[ $recurrence ]['interval'];
	}

	// Now we try to get it from the saved interval in case the schedule disappears.
	if ( 0 === $interval ) {
		$scheduled_event = wp_get_scheduled_event( $hook, $args, $timestamp );
		if ( $scheduled_event && isset( $scheduled_event->interval ) ) {
			$interval = $scheduled_event->interval;
		}
	}

	$event = (object) array(
		'hook'      => $hook,
		'timestamp' => $timestamp,
		'schedule'  => $recurrence,
		'args'      => $args,
		'interval'  => $interval,
	);

	/**
	 * Filter to preflight or hijack rescheduling of events.
	 *
	 * Returning a non-null value will short-circuit the normal rescheduling
	 * process, causing the function to return the filtered value instead.
	 *
	 * For plugins replacing wp-cron, return true if the event was successfully
	 * rescheduled, false if not.
	 *
	 * @since 5.1.0
	 *
	 * @param null|bool $pre   Value to return instead. Default null to continue adding the event.
	 * @param stdClass  $event {
	 *     An object containing an event's data.
	 *
	 *     @type string       $hook      Action hook to execute when the event is run.
	 *     @type int          $timestamp Unix timestamp (UTC) for when to next run the event.
	 *     @type string|false $schedule  How often the event should subsequently recur.
	 *     @type array        $args      Array containing each separate argument to pass to the hook's callback function.
	 *     @type int          $interval  The interval time in seconds for the schedule. Only present for recurring events.
	 * }
	 */
	$pre = apply_filters( 'pre_reschedule_event', null, $event );
	if ( null !== $pre ) {
		return $pre;
	}

	// Now we assume something is wrong and fail to schedule
	if ( 0 == $interval ) {
		return false;
	}

	$now = time();

	if ( $timestamp >= $now ) {
		$timestamp = $now + $interval;
	} else {
		$timestamp = $now + ( $interval - ( ( $now - $timestamp ) % $interval ) );
	}

	return wp_schedule_event( $timestamp, $recurrence, $hook, $args );
}
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться