Класс KAMA_CRON: автоматизация задач в WordPress.

Класс KAMA_CRON

Маленький класс для простого добавления задач (рабочих процессов) WP Cron.

Этот класс позволяет быстро и просто создавать задачи Cron в WordPress. Чтобы ничего не перепутать, все настройки указываются в первом параметре при вызове класса. Класс заботится о правильной регистрации задач Cron и их интервалах. Обработчик задач (функция) нужно написать отдельно на PHP!

Содержание

Как использовать класс KAMA_CRON

Класс KAMA_CRON предназначен для автоматизации выполнения задач по расписанию в WordPress. Он позволяет настраивать задачи, которые будут выполняться периодически или однократно.

Код класса KAMA_CRON

 [
 *         'callback'      => 'wpkama_cron_func', // PHP функция для выполнения задачи
 *         'interval_name' => '10 мин',           // вы можете установить уже зарегистрированный интервал: hourly, twicedaily, daily
 *     ],
 * ] );
 *
 */
class Kama_Cron {
    // Здесь будет код класса
}

Установка

Скопируйте код класса и вставьте его в плагин или в файл functions.php вашей темы.

Если вы используете Composer:

composer require doiftrue/wp-kama-cron

Примеры использования

По умолчанию задачи регистрируются автоматически (это происходит очень быстро), когда вы заходите в панель администратора или отправляете запрос WP_CLI, либо при любом cron-запросе. Если автоматическая регистрация не нужна, укажите параметр 'auto_activate' => false и активируйте задачи вручную, используя метод activate(). Вот пример:

Повторяющаяся задача

Используем известный интервал WP (ежечасно):

new KamaWPKama_Cron( [
    'wpkama_core_data_check_update' => [
        'callback'      => 'wpkama_core_data_check_update',
        'interval_name' => 'hourly',
    ]
] );

function wpkama_core_data_check_update() {
    // ваш код для выполнения задачи
}

Используем неизвестный интервал WP (10 минут):

new KamaWPKama_Cron( [
    'wpkama_cron_hook' => [
        'callback'      => 'wpkama_cron_func',
        'interval_name' => '10 минут',
    ],
] );

function wpkama_cron_func() {
    // ваш код для выполнения задачи
}

В этом случае класс автоматически определит параметры interval_sec и interval_desc.

Однократная задача

Однократная задача (в один раз):

new KamaWPKama_Cron( [
    'single_job' => [
        'callback' => 'single_job_func',
        'start_time' => 1679205600, // время запуска (timestamp)
    ],
] );

Регистрация нескольких задач

Давайте создадим несколько задач с разными интервалами. Задачи автоматически регистрируются, когда вы заходите в панель администратора или отправляете запрос с помощью CLI.

new KamaWPKama_Cron( [
    'id'     => 'my_cron_jobs',
    'events' => [
        'wpkama_cron_func' => [
            'callback'      => [ MyCronCallbacks::class, 'wpkama_cron_func' ],
            'interval_name' => '10 мин',
        ],
        'wpkama_cron_func_2' => [
            'callback'      => [ MyCronCallbacks::class, 'wpkama_cron_func_2' ],
            'interval_name' => '2 часа',
            'start_time'    => strtotime('завтра 6:00'), // запуск в 6:00
        ],
    ],
] );

class MyCronCallbacks {
    public static function wpkama_cron_func() {
        // код задачи
    }

    public static function wpkama_cron_func_2() {
        // код задачи
    }
}

Регистрация задач при активации плагина

Вот как активировать и деактивировать задачи при активации/деактивации плагина.

Важно: в этом случае параметр auto_activate должен быть false:

register_activation_hook( __FILE__, function() {
    KamaWPKama_Cron::get( 'my_cron_jobs_2' )->activate();
} );

register_deactivation_hook( __FILE__, function() {
    KamaWPKama_Cron::get( 'my_cron_jobs_2' )->deactivate();
} );

new KamaWPKama_Cron( [
    'id' => 'my_cron_jobs_2',
    'auto_activate' => false, // !Важно
    'events' => [
        'wpkama_cron_func_4' => [
            'callback'      => 'wpkama_cron_func_4',
            'interval_name' => 'twicedaily',
        ],
    ],
] );

function wpkama_cron_func_4() {
    // код здесь
}

Конструктор класса

Конструктор принимает массив аргументов args. Вот их описание:

  • id (строка): Уникальный идентификатор для доступа к настройкам.
  • auto_activate (true|false): Автоматически создает событие при заходе в админ панель.
  • events (массив): Массив событий для добавления в cron.

Параметры события

Каждое событие может иметь следующие параметры:

  • callback (callable): Имя функции задачи.
  • args (разное): Параметры, передаваемые функции задачи.
  • interval_name (строка): Имя интервала, например: 'half_an_hour'.
  • start_time (int): UNIX временная метка для старта события.

Отладка

Полезный код для отладки:

add_action( 'wp_loaded', function() {
    echo sprintf( "Текущее время: %snnnСуществующие интервалы:n%snnn%s",
        time(), print_r( wp_get_schedules(), 1 ), print_r( _get_cron_array(), 1 )
    );
} );

Также можно использовать плагин для отладки, например, WP Crontrol.

Leave a Reply

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