Vous pouvez créer de nouveaux horaires via 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');
Vous pouvez maintenant planifier votre fonction:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
Pour le planifier une seule fois, enveloppez-le dans une fonction et vérifiez avant de l'exécuter:
$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');
}
Notez le paramètre $ args! Ne pas spécifier le paramètre $ args dans wp_next_scheduled, mais avoir $ args pour wp_schedule_event, provoquera la planification d'un nombre presque infini du même événement (au lieu d'un seul).
Enfin, créez la fonction réelle que vous souhaitez exécuter:
function my_schedule_hook(){
// codes go here
}
Je pense qu'il est important de mentionner que wp-cron vérifie le calendrier et exécute les travaux planifiés à chaque fois qu'une page est chargée.
Donc, si vous avez un site Web à faible trafic qui n'a qu'un seul visiteur par heure, wp-cron ne fonctionnera que lorsque ce visiteur naviguera sur votre site (une fois par heure). Si vous avez un site à fort trafic avec des visiteurs qui demandent une page toutes les secondes, wp-cron sera déclenché toutes les secondes, provoquant une charge supplémentaire sur le serveur.
La solution consiste à désactiver wp-cron et à le déclencher via une véritable tâche cron dans l'intervalle de temps de la tâche wp-cron planifiée qui se répète le plus rapidement (5 min dans votre cas).
Lucas Rolff explique le problème et donne la solution en détail.
Comme alternative, vous pouvez utiliser un service tiers gratuit comme UptimeRobot pour interroger votre site (et déclencher wp-cron) toutes les 5 minutes, si vous ne souhaitez pas désactiver wp-cron et le déclencher via un véritable travail cron.