Работа с 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');
});

Сам наш хук и необходимый код.

Одно НО!
Не знаю у кого как. Лично у меня запуск крона не срабатывал при обновлении обычной страницы. Но крон срабатывает при вызове URL сайта с wp-cron.php. Не знаю, возможно такое поведение будет наблюдаться только на localhost. Хотя пишут, что должно работать и при обычном рефреше страницы. Время покажет.

У кого какие мысли по этому поводу? Спасибо!

Поделиться в соцсетях:

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

Оставить комментарий

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