Класс KAMA_CRON
Маленький класс для простого добавления задач (рабочих процессов) WP Cron.
Этот класс позволяет быстро и просто создавать задачи Cron в WordPress. Чтобы ничего не перепутать, все настройки указываются в первом параметре при вызове класса. Класс заботится о правильной регистрации задач Cron и их интервалах. Обработчик задач (функция) нужно написать отдельно на PHP!
Содержание
- Как использовать класс KAMA_CRON
- Код класса KAMA_CRON
- Установка
- Примеры использования
- Конструктор класса
- Отладка
Как использовать класс 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.