хук-фильтр
since 2.1.0
cron_schedules
Проверено на WordPress 6.9, обновлено Источник: WordPress Developer Resources.
Сигнатура
apply_filters( 'cron_schedules', array $new_schedules )
Описание
Фильтрует нестандартные расписания cron.
Фильтруемое значение
Массив нестандартных расписаний 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
Параметры
$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
Исходный код
wp-includes/cron.php:1167
return array_merge( apply_filters( 'cron_schedules', array() ), $schedules );
История изменений
| Версия | Описание |
|---|---|
| 2.1.0 | Introduced. |

