# WP_SCHEDULE_EVENT() │ WP 2.1.0
Функция WP_SCHEDULE_EVENT() позволяет запланировать выполнение действия по расписанию. Это может быть полезно для автоматизации определённых задач на вашем сайте, например, для регулярного обновления данных.
## Что такое запланированное событие?
Запланированное событие — это действие, которое запускается автоматически WordPress через определённые промежутки времени. Это происходит, когда кто-то посещает ваш сайт и если наступило время выполнения ��адачи.
### Доступные интервалы
Вы можете использовать следующие интервалы для запланированных событий:
- 'hourly' — каждый час
- 'twicedaily' — дважды в день
- 'daily' — ежедневно
- 'weekly' — еженедельно
Эти интервалы можно расширять с помощью фильтра cron_schedules, используя функцию wp_get_schedules().
### Профилактика повторного планирования
Чтобы избежать создания дубликатов событий, вы можете использовать функцию wp_next_scheduled().
Если вам нужно запланировать одноразовое событие, используйте wp_schedule_single_event().
### Возвращаемое значение
Функция возвращает true, если событие успешно запланировано. В противном случае вернётся false или объект WP_Error.
## Пример использования функции
Вот как выглядит стандартный вызов функции:
```php
wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error );
Параметры функции
$timestamp(int) — обязательный. Unix-временная метка в формате UTC, когда должно запуститься событие.$recurrence(string) — обязательный. Как часто событие будет повторяться. Смотрите возможные значения вwp_get_schedules().$hook(string) — обязательный. Имя действия, которое будет выполнено при запуске события.$args(array) — массив аргументов, который передаётся в функцию обратного вызова хука. Каждое значение передаётся как отдельный параметр. Ключи массива игнорируются. Значение по умолчанию — пустой массив.$wp_error(bool) — определяет, нужно ли возвращать объектWP_Errorв случае неудачи. Значение по умолчанию —false.
Примеры
1. Добавление нового интервала
Чтобы добавить новый интервал (например, каждые 5 минут), используйте следующий код:
add_filter( 'cron_schedules', 'cron_add_five_min' );
add_action( 'wp', 'my_activation' );
add_action( 'my_five_min_event', 'do_every_five_min' );
function cron_add_five_min( $schedules ) {
$schedules['five_min'] = array(
'interval' => 60 * 5,
'display' => 'Каждые 5 минут'
);
return $schedules;
}
function my_activation() {
if ( ! wp_next_scheduled( 'my_five_min_event' ) ) {
wp_schedule_event( time(), 'five_min', 'my_five_min_event' );
}
}
function do_every_five_min() {
// Здесь выполняем нужные действия каждые 5 минут
}
2. Создание задачи по расписанию при активации плагина
При активации плагина мы можем запланировать выполнение действия каждый час:
register_activation_hook( __FILE__, 'my_activation' );
register_deactivation_hook( __FILE__, 'my_deactivation' );
add_action( 'my_hourly_event', 'do_this_hourly' );
function my_activation() {
wp_clear_scheduled_hook( 'my_hourly_event' );
wp_schedule_event( time(), 'hourly', 'my_hourly_event');
}
function do_this_hourly() {
// Здесь выполняем нужные действия каждый час
}
function my_deactivation() {
wp_clear_scheduled_hook( 'my_hourly_event' );
}
3. Создание задачи, если такой ещё не существует
Запланируем событие, если оно ещё не было создано:
add_action( 'wp', 'add_my_cron_event' );
add_action( 'my_hourly_event', 'do_this_hourly' );
function add_my_cron_event() {
if( ! wp_next_scheduled( 'my_hourly_event' ) ) {
wp_schedule_event( time(), 'hourly', 'my_hourly_event');
}
}
function do_this_hourly() {
// Здесь выполняем нужные действия каждый час
}
4. Обновление задачи, если она ещё не выполнена
Это полезно, если мы изменяем настройки времени выполнения задачи:
add_action( 'rs_cron_event', 'rs_cron_rebuild_meta_products' );
add_filter( 'cron_schedules', 'rs_cron_interval' );
function rs_cron_rebuild_meta_products() {
// Выполнение действий задачи
}
function rs_cron_interval( $schedules ) {
$value = intval( get_option('options_rs_time_period') ?: 12 );
$schedules['rs_time_period'] = array(
'interval' => $value * HOUR_IN_SECONDS ,
'display' => 'Установлено в настройках плагина'
);
return $schedules;
}
5. Простой класс для удобного добавления WP Cron событий
Вы можете создать класс, который будет облегчит процесс планирования событий для вашего проекта.
Заключение
Функция wp_schedule_event() является мощным инструментом для автоматизации задач в WordPress. Она позволяет создать гибкое расписание для различных действий. Не забывайте использовать механизмы проверки, чтобы избежать дублирования событий.