Puoi creare nuovi orari programmati tramite 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');
Ora puoi programmare la tua funzione:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
Per programmarlo solo una volta, avvolgilo in una funzione e controlla prima di eseguirlo:
$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');
}
Nota il parametro $ args! Non specificando il parametro $ args in wp_next_scheduled, ma avendo $ args per wp_schedule_event, verrà programmato un numero quasi infinito dello stesso evento (anziché solo uno).
Infine, crea la funzione effettiva che desideri eseguire:
function my_schedule_hook(){
// codes go here
}
Penso che sia importante menzionare che wp-cron sta controllando la pianificazione e sta eseguendo i lavori previsti ogni volta che viene caricata una pagina.
Quindi, se hai un sito Web a basso traffico che ha solo 1 visitatore l'ora, wp-cron verrà eseguito solo quando quel visitatore naviga sul tuo sito (una volta ogni ora). Se hai un sito ad alto traffico con visitatori che richiedono una pagina ogni secondo, wp-cron verrà attivato ogni secondo causando un carico aggiuntivo sul server.
La soluzione è disattivare wp-cron e attivarlo tramite un processo cron reale nell'intervallo di tempo del processo wp-cron programmato ripetendo più rapidamente (5 minuti nel caso).
Lucas Rolff spiega il problema e fornisce la soluzione in dettaglio.
In alternativa, è possibile utilizzare un servizio di terze parti gratuito come UptimeRobot per eseguire una query sul sito (e attivare wp-cron) ogni 5 minuti, se non si desidera disattivare wp-cron e attivarlo tramite un processo cron reale.