Планирование событий WP-Cron

wp-cron

Планирование повторяющейся задачи

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

Ниже будет создан хук. Первым параметром является имя хука, а вторым — имя вашей вызываемой функции.
add_action( 'bl_cron_hook', 'bl_cron_exec' );
Теперь к фактическому планированию задачи. Еще одно важное замечание, что WP-Cron своего рода бесхитростный при планировании задач. Задачи управляются хуком, предусмотренным для задачи, однако, если вы вызываете wp_schedule_event() несколько раз, даже с тем же именем хука, событие будет запланировано несколько раз. Если ваш код добавляет задачу при каждой загрузке страницы это может привести к тому, что задача будет запланирована несколько тысяч раз. Наверное, не самая хорошая идея. WordPress предоставляет удобную функцию под названием wp_next_scheduled(), чтобы проверить, что конкретный хук уже запланирован.

wp_next_scheduled() принимает один параметр, имя хука. Она будет возвращать либо строку, содержащую метку времени следующего выполнения или FALSE, означающий, что задача не запланирована. Функция используется так:
wp_next_scheduled( 'bl_cron_hook' );
Планирование повторяющейся задачи достигается с помощью wp_schedule_event(). Эта функция принимает три обязательных параметра, и один дополнительный параметр, который является массивом и может быть передан в функцию, выполняющей WP-Cron задание. Мы сосредоточимся на первых трех параметрах. Параметры таковы:

  1. $timestamp — временная метка Unix, когда эта задача должна выполняться впервые
  2. $recurrence — имя интервала, в котором задача повторится в секундах
  3. $hook — название нашего пользовательского хука для вызова

Мы будем использовать 5-ти секундный интервал и хук, который мы создали ранее:
wp_schedule_event( time(), '5seconds', 'bl_cron_hook' );
Помните, мы должны сначала убедиться, задача еще не запланирована, полный код для этого является следующим:

Снятие задачи с планирования

Если вам больше не нужна задача по расписанию, вы можете снять c планирования задачу с помощью wp_unschedule_event(). Эта функция принимает следующие два параметра:

  1. $timestamp — временная метка следующего появления задачи
  2. $hook — имя пользовательского хука для вызова

Эта функция не только снимает запланированную задачу с указанной меткой времени, она также снимает с планирования все будущие происшествия задачи. Так как вы, вероятно, не будете знать метку времени выполнения следующей задачи, поэтому есть функция wp_next_schedule(), которая будет находить ее для вас. wp_next_scheduled() принимает один параметр:

  1. $hook — Название хука, который призван выполнять задачу

Сложив все это вместе, наш код будет выглядеть следующим образом:

Очень важно снять запланированные задачи, когда они больше не нужны, так как WordPress будет продолжать попытки выполнить задачи, даже если они больше не используются. Важно помнить, что нужно удалить все запланированные задачи после деактивации плагина. К сожалению, есть много плагинов в репозитории, которые не убирают за собой. Если вы найдете один из таких плагинов, пожалуйста, сообщите автору, чтобы он обновил свой код. WordPress предоставляет функцию под названием register_deactivation_hook(), которая позволяет разработчикам запускать функцию, когда их плагин отключается. Она очень проста в установке и выглядит следующим образом:

Навигация по разделам:

Оставить комментарий

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