A WordPress-centric search engine for devs and theme authors

wp_schedule_event ›

wp_schedule_event ( $timestamp, $recurrence, $hook, $args = array() )
Parameters: (4)
  • (int) $timestamp Unix timestamp (UTC) for when to next run the event.
    Required: Yes
  • (string) $recurrence How often the event should subsequently recur. See wp_get_schedules() for accepted values.
    Required: Yes
  • (string) $hook Action hook to execute when the event is run.
    Required: Yes
  • (array) $args Optional. Array containing each separate argument to pass to the hook's callback function.
    Required: No
    Default: array()
  • (bool) True if event successfully scheduled. False for failure.
Defined at:
Change Log:
  • 5.0.0

Schedules a recurring event.

Schedules a hook which will be triggered by WordPress at the specified interval. The action will trigger when someone visits your WordPress site if the scheduled time has passed.

Valid values for the recurrence are 'hourly', 'daily', and 'twicedaily'. These can be extended using the {@see 'cron_schedules'} filter in wp_get_schedules().

Note that scheduling an event to occur within 10 minutes of an existing event with the same action hook will be ignored unless you pass unique $args values for each scheduled event.

Use wp_next_scheduled() to prevent duplicate events.

Use wp_schedule_single_event() to schedule a non-recurring event.


function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array() ) {
	// Make sure timestamp is a positive integer
	if ( ! is_numeric( $timestamp ) || $timestamp <= 0 ) {
		return false;

	$crons     = _get_cron_array();
	$schedules = wp_get_schedules();

	if ( ! isset( $schedules[ $recurrence ] ) ) {
		return false;

	$event = (object) array(
		'hook'      => $hook,
		'timestamp' => $timestamp,
		'schedule'  => $recurrence,
		'args'      => $args,
		'interval'  => $schedules[ $recurrence ]['interval'],
	/** This filter is documented in wp-includes/cron.php */
	$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,
		'interval' => $event->interval,
	uksort( $crons, 'strnatcasecmp' );
	return _set_cron_array( $crons );