Робота з CRON в CMS WordPress

Робота з CRON в CMS WordPress

У цій короткій нотатці я наведу невеликий приклад роботи з кроном у такому популярному рушії як 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. Хоча пишуть, що має працювати і при звичайному оновленні сторінки. Час покаже.

У кого які думки з цього приводу? Дякую!

З вашим WordPress сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *