true|false|WP_Error. False, якщо планування подій скасовано плагіном (хук ‘schedule_event’ повертає false). В інших випадках нічого не повертає – поверне NULL.
Функції сron у WP використовує тимчасову зону UTC/GMT, а не локальну (встановлену в налаштуваннях), тому для встановлення часу використовуйте функцію time() , вона теж повертає час у UTC/GMT.
$hook (рядок) (обов’язковий)
Назва хука, який потрібно викликати у вказаний у параметрі $timestamp час.
$args (масив)
Параметри, які потрібно передати у функцію-обробник хука.
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); }