У цій короткій нотатці я наведу невеликий приклад роботи з кроном у такому популярному рушії як WordPress.
Для регулярно повторюваної задачі (тобто коду, який потрібно виконувати регулярно), можна використати наступну заготівку коду:
add_filter('cron_schedules', function ( $schedules ) {
$schedules['10sec'] = array(
'interval' => 10,
'display' => __('Every 10 sec'),
);
return $schedules;
});
add_action('init', function(){
if(!wp_next_scheduled('post_event_cron_action'))
{
wp_schedule_event( time(), '10sec', 'post_event_cron_action');
}
});
add_action('post_event_cron_action', function () {
echo 'Mail sent';
mail('test@example.com', 'Test subject', 'Test body');
});Що ми тут робимо? Перше — створюємо власний інтервал виклику коду. Тобто час, після якого наш код буде запущено:
add_filter('cron_schedules', function ( $schedules ) {
$schedules['10sec'] = array(
'interval' => 10,
'display' => __('Every 10 sec'),
);
return $schedules;
});Ми використовуємо фільтр "cron_schedules" з анонімною функцією. В єдиний параметр $schedules ми додаємо додатковий інтервал (у вигляді ключа масиву) і вказуємо йому назву, а також період у секундах, через який цей інтервал має спрацьовувати.
Друге:
add_action('init', function(){
if(!wp_next_scheduled('post_event_cron_action'))
{
wp_schedule_event( time(), '10sec', 'post_event_cron_action');
}
});«Ставимо» нашу задачу в крон, попередньо перевіряючи, чи вже була вона запланована раніше. Наша крон-задача вказана третім параметром "post_event_cron_action" і є назвою хука. Другим параметром передається назва (індекс, який ми додали раніше) нашого інтервалу. А першим — початкова мітка часу, з якої хук почне працювати.
Третє (і останнє):
add_action('post_event_cron_action', function () {
echo 'Mail sent';
mail('test@example.com', 'Test subject', 'Test body');
});Сам хук і необхідний код.
Але є одне АЛЕ!
Не знаю як у кого, але особисто в мене крон не запускався при звичайному оновленні сторінки. Проте він спрацьовує при зверненні до wp-cron.php за URL сайту. Можливо, така поведінка спостерігається лише на localhost. Хоча пишуть, що має працювати і при звичайному оновленні сторінки. Час покаже.
У кого які думки з цього приводу? Дякую!
