WP_SCHEDULE_EVENT(): Как создавать и управлять запланированными событиями

# 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. Она позволяет создать гибкое расписание для различных действий. Не забывайте использовать механизмы проверки, чтобы избежать дублирования событий.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *