В данной короткой заметке, я приведу небольшой пример работы с кроном, в таком популярном движке как 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. Хотя пишут, что должно работать и при обычном рефреше страницы. Время покажет.
У кого какие мысли по этому поводу? Спасибо!