wp_schedule_single_event() WP 2.1.0

Створює одноразове крон-завдання. Встановлює хук, який буде викликаний лише один раз у вказаний час.

Необхідність виклику хука (виконання події) перевіряється щоразу, коли хтось відвідав сайт.

Детально про Крон: WP Cron (планувальник) у WordPress

Щоб запланувати подію, що повторюється через вказаний проміжок часу, використовуйте wp_schedule_event() .

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

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

Повертає

true|false|WP_Error. False, якщо планування подій скасовано плагіном (хук ‘schedule_event’ повертає false). В інших випадках нічого не повертає – поверне NULL.

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

wp_schedule_single_event( $timestamp, $hook, $args, $wp_error );
$timestamp
(число) (обов’язковий)

Час Timestamp , коли потрібно виконати подію.

Функції сron у WP використовує тимчасову зону UTC/GMT, а не локальну (встановлену в налаштуваннях), тому для встановлення часу використовуйте функцію time() , вона теж повертає час у UTC/GMT.

$hook
(рядок) (обов’язковий)
Назва хука, який потрібно викликати у вказаний у параметрі
$timestamp час.
$args
(масив)
Параметри, які потрібно передати у функцію-обробник хука.


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


Типово: false

Приклади

0

#1 Заплануємо подію за годину з поточного моменту

// додає нову одноразову крон завдання add_action( 'admin_head', 'my_activation'); function my_activation() { if( ! wp_next_scheduled( 'my_new_event' ) ) { wp_schedule_single_event( time() + 3600, 'my_new_event' ); // time() + 3600 = 1:00 з поточного моменту. } } add_action( 'my_new_event', 'do_this_in_an_hour' ); function do_this_in_an_hour(){ // робимо щось }
0

#2 Як передати аргументи у функцію-обробник

add_action( 'my_new_event', 'do_this_in_an_hour', 10, 3); function do_this_in_an_hour( $arg1, $arg2, $arg3 ){ // робимо щось } wp_schedule_single_event( time() + 3600, 'my_new_event', array( $arg1, $arg2, $arg3 ) );

список змін

З версії 2.1.0Введено.
З версії 5.1.0Відновлювальна величина внесена в boolean позначення успіху або помилки, pre_schedule_event filtr added до шорт-circuit функцій.
З версії 5.7.0The $wp_error parameter був added.

Код wp_schedule_single_event() WP 6.0.2

function wp_schedule_single_event( $timestamp, $hook, $args = array(), $wp_error = false ) { // Make sure timestamp is a positive integer. if (! is_numeric( $timestamp ) || $timestamp <= 0 ) { if ( $wp_error ) { return new WP_Error( 'invalid_timestamp', __( 'Event timestamp must be a valid Unix timestamp.' ) ); } return false; } $event = (object) array( 'hook' => $hook, 'timestamp' => $timestamp, 'schedule' => false, 'args' => $args, ); /** * Filter to preflight або hijack scheduling an event. * * Returning a non-null value will short-circuit adding the event to the * cron array, causing the function to return the filtered value instead. * * Both single events and recurring events є passed this filter; * single events have `$event->schedule` as false, whereas recurring events * have this set to a recurrence з wp_get_schedules(). Recurring * Events also have the integer recurrence interval set as `$event->interval`. * * Для plugins replacing wp-cron, it is recommended you check for an * identical event within ten minutes and apply {@see 'schedule_event'} * Filter to check if another plugin has disallowed the event before scheduling. * * Return true if the event was scheduled, false or a WP_Error if not. * * @ Since 5.1.0 * @since 5.7.0 The `$wp_error` parameter був added, and a `WP_Error` object can now be returned. * * @param null|bool|WP_Error $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) для того, щоб завершити виконання. * @type string|false $schedule Якщо ви будете продовжувати відповідний запис. * @type array $args Array містить один окремий argument для прослуховування функцій calokback. * @type int $interval Time time in seconds for the schedule. Тільки present для recurring events. * } * @param bool $wp_error Whether to return WP_Error on failure. */ $pre = apply_filters( 'pre_schedule_event', null, $event, $wp_error ); if ( null !== $pre ) { if ( $wp_error && false === $pre ) { return new WP_Error( 'pre_schedule_event_false', __( 'A plugin prevented the event from being scheduled.' ) ); } if ( ! $wp_error && is_wp_error( $pre ) ) { return false; } return $pre; } /* * Check for a duplicated event. * * Чи не є schedule event if there's already an identical event * З 10 хвилинами. * * Якщо вивчаються операції зв 1 хвилини поточного часу, * all past identical events are considered duplicates. * * Якщо ви будете вивчати з past timestamp (ie, before the * current time) all events scheduled within the next ten minutes * are considered duplicates. */ $crons = _get_cron_array(); if (! is_array($crons)) { $crons = array(); } $key = md5(serialize( $event->args ) ); $duplicate = false; if ( $event->timestamp < time() + 10 * MINUTE_IN_SECONDS ) { $ min_timestamp = 0; } else { $min_timestamp = $event->timestamp - 10 * MINUTE_IN_SECONDS; } if ( $event->timestamp < time() ) { $max_timestamp = time() + 10 * MINUTE_IN_SECONDS; } else { $max_timestamp = $event->timestamp + 10 * MINUTE_IN_SECONDS; } foreach ( $crons as $event_timestamp => $cron ) { if ( $event_timestamp < $min_timestamp ) { continue; } if ( $event_timestamp > $max_timestamp ) { break; } if ( isset( $cron[ $event->hook ][ $key ] ) ) { $ duplicate = true; break; } } if ($ duplicate) { if ( $wp_error ) { return new WP_Error( 'duplicate_event', __( 'A duplicate event already exists.' ) ); } return false; } /** * Modify an event before it is scheduled. * * @ Since 3.1.0 * * @param stdClass|false $event { * На об'єкті міститься автентифікація даних, або boolean false до того, щоб скористатися результатом, коли був scheduled. * * @type string $hook Action hook to execute when the event is run. * @type int $timestamp Unix timestamp (UTC) для того, щоб завершити виконання. * @type string|false $schedule Якщо ви будете продовжувати відповідний запис. * @type array $args Array містить один окремий argument для прослуховування функцій calokback. * @type int $interval Time time in seconds for the schedule. Тільки present для recurring events. * } */ $event = apply_filters( 'schedule_event', $event ); // A plugin disallowed this event. if ( ! $event ) { if ( $wp_error ) { return new WP_Error( 'schedule_event_false', __( 'A plugin disallowed this event.' ) ); } return false; } $crons[ $event->timestamp ][ $event->hook ][ $key ] = array( 'schedule' => $event->schedule, 'args' => $event->args, ); uksort($crons, 'strnatcasecmp'); return _set_cron_array($crons, $wp_error); }

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

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