хук-фильтр 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.

Что будем искать? Например,Продвижение

Этот сайт использует куки-файлы. Оставаясь на сайте, Вы соглашаетесь на их использование. Для получения дополнительной информации, пожалуйста, ознакомьтесь с политикой в отношении персональных данных.