Вы можете создать новое расписание с помощью cron_schedules:
function my_cron_schedules($schedules){
if(!isset($schedules["5min"])){
$schedules["5min"] = array(
'interval' => 5*60,
'display' => __('Once every 5 minutes'));
}
if(!isset($schedules["30min"])){
$schedules["30min"] = array(
'interval' => 30*60,
'display' => __('Once every 30 minutes'));
}
return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');
Теперь вы можете запланировать свою функцию:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
Чтобы запланировать это только один раз, оберните его в функцию и проверьте перед запуском:
$args = array(false);
function schedule_my_cron(){
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
}
if(!wp_next_scheduled('my_schedule_hook',$args)){
add_action('init', 'schedule_my_cron');
}
Обратите внимание на параметр $ args! Не указав параметр $ args в wp_next_scheduled, но имея $ args для wp_schedule_event, будет запланировано почти бесконечное число одного и того же события (вместо одного).
Наконец, создайте фактическую функцию, которую вы хотели бы запустить:
function my_schedule_hook(){
// codes go here
}
Я думаю, что важно упомянуть, что wp-cron проверяет расписание и запускает запланированные задания каждый раз при загрузке страницы.
Таким образом, если у вас есть сайт с низким трафиком, у которого всего 1 посетитель в час, wp-cron будет работать только тогда, когда этот посетитель просматривает ваш сайт (один раз в час). Если у вас сайт с большим трафиком, и посетители просят страницу каждую секунду, wp-cron будет срабатывать каждую секунду, вызывая дополнительную нагрузку на сервер.
Решение состоит в том, чтобы деактивировать wp-cron и запустить его через реальное задание cron за тот промежуток времени, когда вы выполняете самое быстрое повторение запланированного задания wp-cron (в вашем случае 5 минут).
Лукас Ролф объясняет проблему и дает решение в деталях.
В качестве альтернативы вы можете использовать бесплатный сторонний сервис, такой как UptimeRobot, для запроса вашего сайта (и запуска wp-cron) каждые 5 минут, если вы не хотите деактивировать wp-cron и запускать его с помощью реального задания cron.