# cron_schedules

URL: https://chugunov.pro/api-wordpress/filters/cron_schedules/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: хук-фильтр.
Появился в версии: 2.1.0.

## Сигнатура

```php
apply_filters( 'cron_schedules', array $new_schedules )
```

## Описание

Фильтрует нестандартные расписания cron.

## Параметры

- `$new_schedules` `array` — обязательный. Массив нестандартных расписаний cron с ключами по имени расписания. Значение по умолчанию — пустой массив.
  
  ...$0 array Сведения о расписании cron.
  interval intИнтервал расписания в секундах.
  
  display stringОтображаемое имя расписания.
  
  More Information
  Фильтр принимает массив нестандартных расписаний cron в виде массивов (массив массивов). Внешний массив имеет ключ, являющийся именем расписания (например, ‘weekly’). Значением служит массив с двумя ключами: ‘interval’ и ‘display’.
  
  ‘interval’ — это число в секундах, определяющее, когда должна выполняться задача cron. Так, для почасового расписания значением ‘interval’ будет 3600 или 60*60. Для еженедельного расписания значение ‘interval’ составит 60*60*24*7 или 604800.
  
  ‘display’ — это описание нестандартного расписания cron. Для ключа ‘weekly’ значением ‘display’ может быть __(‘Once Weekly’).
  
  Почему это важно?
  
  Планируя выполнение собственных действий с помощью службы Cron в WordPress, необходимо указать, какой интервал должен использовать WordPress. У WordPress есть собственный ограниченный стандартный набор интервалов, или «расписаний», включая ‘hourly’, ‘twicedaily’ и ‘daily’. Этот фильтр позволяет добавить собственные интервалы к стандартному набору.
  
  В ваш плагин будет передан массив, и вы легко можете добавить еженедельное расписание примерно так:
  
  function my_add_weekly( $schedules ) {
  // add a 'weekly' schedule to the existing set
  $schedules['weekly'] = array(
  'interval' => 604800,
  'display' => __('Once Weekly')
  );
  return $schedules;
  }
  add_filter( 'cron_schedules', 'my_add_weekly' );
  
  Добавление нескольких интервалов выполняется аналогично:
  
  function my_add_intervals($schedules) {
  // add a 'weekly' interval
  $schedules['weekly'] = array(
  'interval' => 604800,
  'display' => __('Once Weekly')
  );
  $schedules['monthly'] = array(
  'interval' => 2635200,
  'display' => __('Once a month')
  );
  return $schedules;
  }
  add_filter( 'cron_schedules', 'my_add_intervals');
  
  Обязательно добавляйте своё расписание в переданный массив, как показано в примере. Если вы вернёте только собственный массив расписаний, то можете случайно удалить расписания, созданные другими плагинами.
  
  Source return array_merge( apply_filters( 'cron_schedules', array() ), $schedules );
  View all references View on Trac View on GitHub
  
  Related Used byDescriptionwp_get_schedules()wp-includes/cron.phpПолучает поддерживаемые расписания повторения событий.
  
  Changelog VersionDescription2.1.0Добавлено.
  User Contributed Notes
  
  Skip to note 5 content
  
  Dominik Schilling
  
  10 лет назад
  
  You must log in to vote on the helpfulness of this noteVote results for this note: 3You must log in to vote on the helpfulness of this note
  
  Добавление собственного расписания cron, выполняемого каждые 5 минут:
  
  /**
  * Adds a custom cron schedule for every 5 minutes.
  *
  * @param array $schedules An array of non-default cron schedules.
  * @return array Filtered array of non-default cron schedules.
  */
  function devhub_custom_cron_schedule( $schedules ) {
  $schedules[ 'every-5-minutes' ] = array( 'interval' => 5 * MINUTE_IN_SECONDS, 'display' => __( 'Every 5 minutes', 'devhub' ) );
  return $schedules;
  }
  add_filter( 'cron_schedules', 'devhub_custom_cron_schedule' );
  
  Log in to add feedback
  
  Skip to note 6 content
  
  dhl17
  
  8 лет назад
  
  You must log in to vote on the helpfulness of this noteVote results for this note: 1You must log in to vote on the helpfulness of this note
  
  Собственное расписание cron, выполняемое каждые 10 и 15 секунд
  
  function custom_cron_job_recurrence( $schedules )
  {
  if(!isset($schedules['10sec']))
  {
  $schedules['10sec'] = array(
  'display' => __( 'Every 10 Seconds', 'twentyfifteen' ),
  'interval' => 10,
  );
  }
  
  if(!isset($schedules['15sec']))
  {
  $schedules['15sec'] = array(
  'display' => __( 'Every 15 Seconds', 'twentyfifteen' ),
  'interval' => 15,
  );
  }
  
  return $schedules;
  }
  add_filter( ‘cron_schedules’, ‘custom_cron_job_recurrence’ );
  
  Log in to add feedback
  
  Skip to note 7 content
  
  Ihtisham Zahoor
  
  5 лет назад
  
  You must log in to vote on the helpfulness of this noteVote results for this note: 1You must log in to vote on the helpfulness of this note
  
  Добавление пользовательского значения интервала:
  
  Функциональный подход
  
  add_filter( 'cron_schedules', 'wpdocs_add_cron_interval' );
  function wpdocs_add_cron_interval( $schedules ) {
  $options = get_option( 'wpdocs_custom_interval' );
  $interval = ( ! empty( $options ) ? absint( $options ) * HOUR_IN_SECONDS : DAY_IN_SECONDS );
  
  $schedules['wpdocs_interval'] = array(
  'interval' => $interval,
  'display' => esc_html__( 'Custom Interval' )
  );
  
  return $schedules;
  }
  Подход на основе класса
  
  add_filter( 'cron_schedules', array( $this, 'add_cron_interval' ) );
  
  /**
  * Adds custom time intervals for the cron.
  */
  private function add_cron_interval( $schedules ) {
  $options = get_option( 'wpdocs_custom_interval' );
  $interval = ( ! empty( $options ) ? absint( $options ) * HOUR_IN_SECONDS : DAY_IN_SECONDS );
  
  $schedules['wpdocs_interval'] = array(
  'interval' => $interval,
  'display' => esc_html__( 'Custom Interval' )
  );
  
  return $schedules;
  }
  
  Log in to add feedback
  
  Skip to note 8 content
  
  BogdanFix
  
  5 лет назад
  
  You must log in to vote on the helpfulness of this noteVote results for this note: 1You must log in to vote on the helpfulness of this note
  
  Полезный совет для экономии времени: рекомендую всегда подключаться к фильтру cron_schedules внутри крупного действия, выполняемого при каждой загрузке страницы, например init или wp_loaded. И подключаться к этому фильтру до кода, использующего собственное расписание.
  
  Например:
  
  // function that registers new custom schedule
  
  function bf_add_custom_schedule( $schedules )
  {
  $schedules[ 'every_five_minutes' ] = array(
  'interval' => 300,
  'display' => 'Every 5 minutes',
  );
  
  return $schedules;
  }
  
  // function that schedules custom event
  
  function bf_schedule_custom_event()
  {
  // the actual hook to register new custom schedule
  
  add_filter( 'cron_schedules', 'bf_add_custom_schedule' );
  
  // schedule custom event
  
  if( !wp_next_scheduled( 'bf_your_custom_event' ) )
  {
  wp_schedule_event( time(), 'every_five_minutes', 'bf_your_custom_event' );
  }
  }
  add_action( 'init', 'bf_schedule_custom_event' );
  
  // fire custom event
  
  function bf_do_something_on_schedule()
  {
  // your code...
  }
  add_action( 'bf_your_custom_event', 'bf_do_something_on_schedule' );
  Этот подход гарантирует, что ваше собственное расписание всегда зарегистрировано до того, как оно будет использовано в функции wp_schedule_event. И избавляет от неприятной ошибки "invalid_schedule":"Event schedule does not exist.".
  
  Cheers :)
  
  Log in to add feedback

## Фильтруемое значение

Массив нестандартных расписаний cron с ключами по имени расписания. Значение по умолчанию — пустой массив.

...$0 array Сведения о расписании cron.
interval intИнтервал расписания в секундах.

display stringОтображаемое имя расписания.

More Information
Фильтр принимает массив нестандартных расписаний cron в виде массивов (массив массивов). Внешний массив имеет ключ, являющийся именем расписания (например, ‘weekly’). Значением служит массив с двумя ключами: ‘interval’ и ‘display’.

‘interval’ — это число в секундах, определяющее, когда должна выполняться задача cron. Так, для почасового расписания значением ‘interval’ будет 3600 или 60*60. Для еженедельного расписания значение ‘interval’ составит 60*60*24*7 или 604800.

‘display’ — это описание нестандартного расписания cron. Для ключа ‘weekly’ значением ‘display’ может быть __(‘Once Weekly’).

Почему это важно?

Планируя выполнение собственных действий с помощью службы Cron в WordPress, необходимо указать, какой интервал должен использовать WordPress. У WordPress есть собственный ограниченный стандартный набор интервалов, или «расписаний», включая ‘hourly’, ‘twicedaily’ и ‘daily’. Этот фильтр позволяет добавить собственные интервалы к стандартному набору.

В ваш плагин будет передан массив, и вы легко можете добавить еженедельное расписание примерно так:

function my_add_weekly( $schedules ) {
// add a 'weekly' schedule to the existing set
$schedules['weekly'] = array(
'interval' => 604800,
'display' => __('Once Weekly')
);
return $schedules;
}
add_filter( 'cron_schedules', 'my_add_weekly' );

Добавление нескольких интервалов выполняется аналогично:

function my_add_intervals($schedules) {
// add a 'weekly' interval
$schedules['weekly'] = array(
'interval' => 604800,
'display' => __('Once Weekly')
);
$schedules['monthly'] = array(
'interval' => 2635200,
'display' => __('Once a month')
);
return $schedules;
}
add_filter( 'cron_schedules', 'my_add_intervals');

Обязательно добавляйте своё расписание в переданный массив, как показано в примере. Если вы вернёте только собственный массив расписаний, то можете случайно удалить расписания, созданные другими плагинами.

Source return array_merge( apply_filters( 'cron_schedules', array() ), $schedules );
View all references View on Trac View on GitHub

Related Used byDescriptionwp_get_schedules()wp-includes/cron.phpПолучает поддерживаемые расписания повторения событий.

Changelog VersionDescription2.1.0Добавлено.
User Contributed Notes

Skip to note 5 content

Dominik Schilling

10 лет назад

You must log in to vote on the helpfulness of this noteVote results for this note: 3You must log in to vote on the helpfulness of this note

Добавление собственного расписания cron, выполняемого каждые 5 минут:

/**
* Adds a custom cron schedule for every 5 minutes.
*
* @param array $schedules An array of non-default cron schedules.
* @return array Filtered array of non-default cron schedules.
*/
function devhub_custom_cron_schedule( $schedules ) {
$schedules[ 'every-5-minutes' ] = array( 'interval' => 5 * MINUTE_IN_SECONDS, 'display' => __( 'Every 5 minutes', 'devhub' ) );
return $schedules;
}
add_filter( 'cron_schedules', 'devhub_custom_cron_schedule' );

Log in to add feedback

Skip to note 6 content

dhl17

8 лет назад

You must log in to vote on the helpfulness of this noteVote results for this note: 1You must log in to vote on the helpfulness of this note

Собственное расписание cron, выполняемое каждые 10 и 15 секунд

function custom_cron_job_recurrence( $schedules )
{
if(!isset($schedules['10sec']))
{
$schedules['10sec'] = array(
'display' => __( 'Every 10 Seconds', 'twentyfifteen' ),
'interval' => 10,
);
}

if(!isset($schedules['15sec']))
{
$schedules['15sec'] = array(
'display' => __( 'Every 15 Seconds', 'twentyfifteen' ),
'interval' => 15,
);
}

return $schedules;
}
add_filter( ‘cron_schedules’, ‘custom_cron_job_recurrence’ );

Log in to add feedback

Skip to note 7 content

Ihtisham Zahoor

5 лет назад

You must log in to vote on the helpfulness of this noteVote results for this note: 1You must log in to vote on the helpfulness of this note

Добавление пользовательского значения интервала:

Функциональный подход

add_filter( 'cron_schedules', 'wpdocs_add_cron_interval' );
function wpdocs_add_cron_interval( $schedules ) {
$options = get_option( 'wpdocs_custom_interval' );
$interval = ( ! empty( $options ) ? absint( $options ) * HOUR_IN_SECONDS : DAY_IN_SECONDS );

$schedules['wpdocs_interval'] = array(
'interval' => $interval,
'display' => esc_html__( 'Custom Interval' )
);

return $schedules;
}
Подход на основе класса

add_filter( 'cron_schedules', array( $this, 'add_cron_interval' ) );

/**
* Adds custom time intervals for the cron.
*/
private function add_cron_interval( $schedules ) {
$options = get_option( 'wpdocs_custom_interval' );
$interval = ( ! empty( $options ) ? absint( $options ) * HOUR_IN_SECONDS : DAY_IN_SECONDS );

$schedules['wpdocs_interval'] = array(
'interval' => $interval,
'display' => esc_html__( 'Custom Interval' )
);

return $schedules;
}

Log in to add feedback

Skip to note 8 content

BogdanFix

5 лет назад

You must log in to vote on the helpfulness of this noteVote results for this note: 1You must log in to vote on the helpfulness of this note

Полезный совет для экономии времени: рекомендую всегда подключаться к фильтру cron_schedules внутри крупного действия, выполняемого при каждой загрузке страницы, например init или wp_loaded. И подключаться к этому фильтру до кода, использующего собственное расписание.

Например:

// function that registers new custom schedule

function bf_add_custom_schedule( $schedules )
{
$schedules[ 'every_five_minutes' ] = array(
'interval' => 300,
'display' => 'Every 5 minutes',
);

return $schedules;
}

// function that schedules custom event

function bf_schedule_custom_event()
{
// the actual hook to register new custom schedule

add_filter( 'cron_schedules', 'bf_add_custom_schedule' );

// schedule custom event

if( !wp_next_scheduled( 'bf_your_custom_event' ) )
{
wp_schedule_event( time(), 'every_five_minutes', 'bf_your_custom_event' );
}
}
add_action( 'init', 'bf_schedule_custom_event' );

// fire custom event

function bf_do_something_on_schedule()
{
// your code...
}
add_action( 'bf_your_custom_event', 'bf_do_something_on_schedule' );
Этот подход гарантирует, что ваше собственное расписание всегда зарегистрировано до того, как оно будет использовано в функции wp_schedule_event. И избавляет от неприятной ошибки "invalid_schedule":"Event schedule does not exist.".

Cheers :)

Log in to add feedback

## Исходный код

Файл: `wp-includes/cron.php:1167`

```php
return array_merge( apply_filters( 'cron_schedules', array() ), $schedules );
```

## История изменений

- 2.1.0 — Introduced.

## Связанные

Используется в: [`wp_get_schedules`](https://chugunov.pro/api-wordpress/functions/wp_get_schedules/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/hooks/cron_schedules/
