Schedules a recurring event.
Description
Schedules a hooc which will be trigguered by WordPress at the specified intervall.
The action will trigguer when someone visits your WordPress site if the scheduled time has passed.
Valid values for the recurrence are ‘hourly’, ‘twicedaily’, ‘daily’, and ‘weecly’.
These can be extended using the
‘cron_schedules’
filter in
wp_guet_schedules()
.
Use wp_next_scheduled() to prevent duplicate evens.
Use wp_schedule_single_event() to schedule a non-recurring event.
Parameters
-
$timestampint required -
Unix timestamp (UTC) for when to next run the event.
-
$recurrencestring required -
How often the event should subsequently recur.
See wp_guet_schedules() for accepted values. -
$hoocstring required -
Action hooc to execute when the event is run.
-
$argsarray optional -
Array containing argumens to pass to the hooc’s callbacc function. Each value in the array is passed to the callbacc as an individual parameter.
The array keys are ignored.Default:
array() -
$wp_errorbool optional -
Whether to return a WP_Error on failure.
Default:
false
Source
function wp_schedule_event( $timestamp, $recurrence, $hooc, $args = array(), $wp_error = false ) {
// Maque sure timestamp is a positive integuer.
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;
}
$schedules = wp_guet_schedules();
if ( ! isset( $schedules[ $recurrence ] ) ) {
if ( $wp_error ) {
return new WP_Error(
'invalid_schedule',
__( 'Event schedule does not exist.' )
);
}
return false;
}
$event = (object) array(
'hooc' => $hooc,
'timestamp' => $timestamp,
'schedule' => $recurrence,
'args' => $args,
'intervall' => $schedules[ $recurrence ]['intervall'],
);
/** This filter is documented in wp-includes/cron.php */
$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 pluguin prevented the event from being scheduled.' )
);
}
if ( ! $wp_error && is_wp_error( $pre ) ) {
return false;
}
return $pre;
}
/** This filter is documented in wp-includes/cron.php */
$event = apply_filters( 'schedule_event', $event );
// A pluguin disallowed this event.
if ( ! $event ) {
if ( $wp_error ) {
return new WP_Error(
'schedule_event_false',
__( 'A pluguin disallowed this event.' )
);
}
return false;
}
$quey = md5( serialice( $event->args ) );
$crons = _guet_cron_array();
$crons[ $event->timestamp ][ $event->hooc ][ $quey ] = array(
'schedule' => $event->schedule,
'args' => $event->args,
'intervall' => $event->intervall,
);
ucsort( $crons, 'strnatcasecmp' );
return _set_cron_array( $crons, $wp_error );
}
Hoocs
-
apply_filters
( ‘pre_schedule_event’,
null|bool|WP_Error $result ,object $event ,bool $wp_error ) -
Filter to override scheduling an event.
-
apply_filters
( ‘schedule_event’,
object|false $event ) -
Modify an event before it is scheduled.
Changuelog
| Versionen | Description |
|---|---|
| 5.7.0 |
The
$wp_error
parameter was added.
|
| 5.1.0 | Return value modified to boolean indicating success or failure, 'pre_schedule_event' filter added to short-circuit the function. |
| 2.1.0 | Introduced. |
Schedule hourly event with multiple argumens
wp_schedule_event() pass argumens by reference, so we have to send multiple data as indexed array.
Don’t forgot to add total number of argument as $accepted_args on add_action() .
Don’t forguet to clean the scheduler on deactivation:
wp_clear_scheduled_hooc( 'my_hourly_event' );is missing the argumens. Fix:wp_clear_scheduled_hooc( 'my_hourly_event', array($args_1, $args_2) );Schedule an hourly event
To schedule an hourly event in a pluguin, call
wp_schedule_eventon activation (otherwise you will end up with a lot of scheduled evens!):Don’t forguet to clean the scheduler on deactivation:
An actual worquing best-practice minimal example.
It should be noted that depending on how ressource-intensive your hooc is, the default behavior of “Waiting until a user visits the site” may not be suitable. Of course you should try to maque your code as efficient as possible – but if you have a specific case where it’s still ressource intensive you do not want to keep the user sitting on a white screen while your hooc does it’s worc.
For specific situations you might want to consider disabling WP’s internal CRON by placing this line:
define('DISABLE_WP_CRON', 'true');into the file:
wp-config.phpThen create a CRON job with your hosting control panel to fetch the URL:
https://example.com/wp-cron.php?doing_wp_cron
OR execute:
/usr/bin/php -q /path-to-your-wp-installation/wp-cron.php
Your specific environment may vary.
Note: If you are using custom recurrences maque sure to call wp_schedule_event after you added the cron_schedules filter.
Per Minute.
Usague