Функция WP_CRON() в WordPress: работа с запланированными задачами

WP_CRON() │ WP 2.1.0

Функция WP_CRON() предназначена для выполнения всех запланированных задач (крон-заданий), время которых пришло.

Что делает эта функция?

Функция проверяет, есть ли хотя бы одно крон-задание, время которого наступило, и вызывает функцию spawn_cron(), которая отправляет запрос к файлу крон задачи: /example.com/wp-cron.php.

При вызове этой функции запускаются все запланированные задачи, срок выполнения которых уже настал.

Вы можете узнать больше о крон-заданиях, прочитав о функции wp_schedule_event(), которая используется для добавления новых задач. В документации много примеров и полезной информации о кроне в WordPress.

Эта функция автоматически вызывается движком WordPress во время события init.

if ( ! defined( 'DOING_CRON' ) ) {
    add_action( 'init', 'wp_cron' );
}

Нужно ли использовать эту функцию?

В большинстве случаев вам не нужно вручную вызывать эту функцию. Она не будет работать, если определена константа DISABLE_WP_CRON.

Крон получил свое название от программы Unix, которая запускает запланированные задачи без участия пользователя.

Возвращаемые значения

Функция может вернуть:

  • Число — количество выполненных задач (0 означает, что задач для выполнения нет).
  • false — если не удалось обработать ни одно задание.

Эта функция может вернуть логическое значение FALSE, но также может вернуть и другое значение, которое будет оценено как FALSE. Для получения информации о приведении к логическим значениям смотрите документацию PHP. Используйте оператор === для проверки возвращаемого значения этой функции.

Использование

wp_cron();

Примеры

Пример 1: Отправка письма каждый час

Вы можете поместить этот код в файл functions.php вашего шаблона или плагина:

// Запланировать событие, если оно еще не запланировано
// Лучше делать это во время активации плагина/темы
if ( ! wp_next_scheduled( 'my_task_hook' ) ) {
    wp_schedule_event( time(), 'hourly', 'my_task_hook' );
}

// Добавляем обратный вызов
add_action( 'my_task_hook', 'my_task_function' );

function my_task_function() {
    wp_mail( '[email protected]', 'Запланированное письмо', 'Письмо, запланированное от WordPress.');
}

Пример 2: Добавление крон-события с пользовательским интервалом

Код следует добавить в файл functions.php или в плагин.

add_filter( 'cron_schedules', 'mycron_add_schedule' );
add_action( 'init', 'mycron_add_hook' );

// Запланировать событие
function mycron_add_hook(){
    if ( ! wp_next_scheduled( 'my_cron_worker_start' ) ) {
        wp_schedule_event( time(), 'my_cron_worker', 'my_cron_worker_start' );
    }
}

// Добавляем пользовательский интервал
function mycron_add_schedule(){
    $schedules['my_cron_worker'] = array( 'interval' => 60, 'display' => 'Мой Крон Работник' );
    return $schedules;
}

Изменения

  • В версии 2.1.0 функция была введена.
  • В версии 5.1.0 добавлено значение возврата для указания успешного завершения или сбоя.
  • В версии 5.7.0 функциональность была перенесена в функцию _wp_cron(), к которой wp_cron() становится оберткой.

Функция wp_cron()

Функция wp_cron() реализована в файле wp-includes/cron.php:

function wp_cron() {
    if ( did_action( 'wp_loaded' ) ) {
        return _wp_cron();
    }
    add_action( 'wp_loaded', '_wp_cron', 20 );
}

Связанные функции

  • wp_clear_scheduled_hook()
  • wp_delete_auto_drafts()
  • wp_get_schedules()
  • wp_next_scheduled()
  • wp_schedule_event()
  • wp_schedule_single_event()
  • wp_unschedule_event()
  • wp_unschedule_hook()

Эти функции могут помочь вам лучше управлять крон-заданиями в WordPress.

Leave a Reply

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