Você pode criar novos horários de agendamento 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');
Agora você pode agendar sua função:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
Para agendá-lo apenas uma vez, envolva-o em uma função e verifique antes de executá-lo:
$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');
}
Observe o parâmetro $ args! Não especificar o parâmetro $ args em wp_next_scheduled, mas ter $ args para wp_schedule_event, fará com que um número quase infinito do mesmo evento seja agendado (em vez de apenas um).
Por fim, crie a função real que você deseja executar:
function my_schedule_hook(){
// codes go here
}
Eu acho importante mencionar que o wp-cron está verificando o agendamento e executando os trabalhos agendados devidos toda vez que uma página é carregada.
Portanto, se você tiver um site de baixo tráfego que tenha apenas 1 visitante por hora, o wp-cron será executado apenas quando esse visitante navegar no seu site (uma vez por hora). Se você possui um site de alto tráfego com visitantes solicitando uma página a cada segundo, o wp-cron será acionado a cada segundo, causando carga extra no servidor.
A solução é desativar o wp-cron e acioná-lo por meio de um trabalho cron real no intervalo de tempo em que você executou o trabalho wp-cron de repetição mais rápida (5 min no seu caso).
Lucas Rolff explica o problema e fornece a solução em detalhes.
Como alternativa, você pode usar um serviço gratuito de terceiros, como o UptimeRobot, para consultar seu site (e acionar o wp-cron) a cada 5 minutos, se você não deseja desativar o wp-cron e ativá-lo por meio de um trabalho cron real.