安排一个事件只运行一次。
原型
wp_schedule_single_event( int $timestamp, string $hook, array $args = array() )
描述
安排一个事件,该事件将在你指定的时间由WordPress操作核心执行一次。如果计划时间已过,当有人访问你的WordPress网站时,该操作将启动。
参数
$timestamp
(int)
(Required)
用于何时运行事件的Unix时间戳(UTC)。
$hook
(string)
(Required)
在事件运行时执行的Action钩子。
$args
(array)
(Optional)
传递给hook的回调函数的参数。
返回值
(false|void)
如果事件未安排,则返回false。
源文件
路径:wp-includes/cron.php
<?php
...
function wp_schedule_single_event( $timestamp, $hook, $args = array()) {
// Make sure timestamp is a positive integer
if ( ! is_numeric( $timestamp ) || $timestamp <= 0 ) {
return false;
}
// Don't schedule a duplicate if there's already an identical event due within 10 minutes of it
$next = wp_next_scheduled($hook, $args);
if ( $next && abs( $next - $timestamp ) <= 10 * MINUTE_IN_SECONDS ) {
return false;
}
$crons = _get_cron_array();
$event = (object) array( 'hook' => $hook, 'timestamp' => $timestamp, 'schedule' => false, 'args' => $args );
/**
* Filters a single event before it is scheduled.
*
* @since 3.1.0
*
* @param stdClass $event {
* An object containing an event's data.
*
* @type string $hook Action hook to execute when event is run.
* @type int $timestamp Unix timestamp (UTC) for when to run the event.
* @type string|false $schedule How often the event should recur. See `wp_get_schedules()`.
* @type array $args Arguments to pass to the hook's callback function.
* }
*/
$event = apply_filters( 'schedule_event', $event );
// A plugin disallowed this event
if ( ! $event )
return false;
$key = md5(serialize($event->args));
$crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args );
uksort( $crons, "strnatcasecmp" );
_set_cron_array( $crons );
}
...
?>
其他
英文文档:https://developer.wordpress.org/reference/functions/wp_schedule_single_event/