Puede crear nuevos horarios a través de 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');
Ahora puedes programar tu función:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
Para programarlo solo una vez, envuélvalo en una función y verifique antes de ejecutarlo:
$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');
}
Tenga en cuenta el parámetro $ args! No especificar el parámetro $ args en wp_next_scheduled, pero tener $ args para wp_schedule_event hará que se programe un número casi infinito del mismo evento (en lugar de solo uno).
Finalmente, cree la función real que le gustaría ejecutar:
function my_schedule_hook(){
// codes go here
}
Creo que es importante mencionar que wp-cron está verificando la programación y ejecuta los trabajos programados debido cada vez que se carga una página.
Entonces, si tiene un sitio web de bajo tráfico que solo tiene 1 visitante por hora, wp-cron solo se ejecutará cuando ese visitante navegue por su sitio (una vez por hora). Si tiene un sitio de alto tráfico con visitantes que solicitan una página cada segundo, wp-cron se activará cada segundo causando una carga adicional en el servidor.
La solución es desactivar wp-cron y activarlo a través de un trabajo cron real en el intervalo de tiempo del trabajo wp-cron programado que se repite más rápido (5 min en su caso).
Lucas Rolff explica el problema y da la solución en detalle.
Como alternativa, puede utilizar un servicio gratuito de terceros como UptimeRobot para consultar su sitio (y activar wp-cron) cada 5 minutos, si no desea desactivar wp-cron y activarlo a través de un trabajo cron real.