WordPress Version: 6.4
/**
* Retrieves a scheduled event.
*
* Retrieves the full event object for a given event, if no timestamp is specified the next
* scheduled event is returned.
*
* @since 5.1.0
*
* @param string $hook Action hook of the event.
* @param array $args Optional. 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, so they should be the same as those used when originally scheduling the event.
* Default empty array.
* @param int|null $timestamp Optional. Unix timestamp (UTC) of the event. If not specified, the next scheduled event
* is returned. Default null.
* @return object|false {
* The event object. False if the event does not exist.
*
* @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 Optional. The interval time in seconds for the schedule. Only present for recurring events.
* }
*/
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;
}