Feed e Twitter

Feed RSS Twitter

Busca

Por Lustosa em 13/04/2011 às 12:13

As vezes, precisamos que alguma ação seja executada de tempos em tempos no WordPress. Pode ser uma função que busca conteúdo externo, ou uma rotina de manutenção qualquer.

A forma mais comum de fazer isso, é usando o serviço cron (em ambientes Unix), ou o agendador de tarefas (no Windows). Embora ambos funcionem bem, existe uma alternativa, que é usar o próprio WordPress para isso.

Como fazer

Para agendar uma tarefa, existe uma função chamada wp_schedule_event(). Uma chamada típica dessa função seria da seguinte forma:

<?php
wp_schedule_event(time(), 'hourly', 'hook');
add_action('hook', 'funcao_agendada');
?>

Isso agendaria a função “funcao_agendada()” para ser executada de hora em hora, na hora atual.

O primeiro parâmetro informa a hora de agendamento. Como passamos time(), que se traduz na hora atual, o WordPress usará esse valor como hora. O segundo parâmetro é a frequência, que pode ser hourly, daily ou twicedaily (respectivamente de hora em hora, diariamente, ou duas vezes por dia). E por último, o nome de uma “action”, que indicará a função a ser executada.

Para remover o agendamento, a chamada é feita a wp_clear_schedule_hook(), passando como parâmetro somente o nome do hook utilizado (no caso, “hook”).

Um detalhe é que essa função deve ser chamada uma única vez, por isso, pode ser conveniente colocá-la dentro de um plugin, e executar o agendamento na ativação, e remover o agendamento na desativação.

Uma outra forma de se agendar, sem usar plugins, é usar a função wp_next_scheduled() para checar se o evento já foi agendado, da seguinte forma:

<?php
add_action('meu_evento', 'funcao');
function ativacao() {
    if (!wp_next_scheduled('meu_evento')) {
        wp_schedule_event(time(), 'hourly', 'meu_evento');
    }
}
 
add_action('wp', 'ativacao');
 
function funcao() {
    // isso executará de hora em hora
}
?>

Assim, caso o evento não esteja agendado, o WordPress se encarregará de agendá-lo.

As vantagens

A principal vantagem é que o agendamento fica independente de qualquer coisa externa. Tudo fica gerenciado pelo próprio WordPress, e numa eventual mudança de servidor, não haveria necessidade de se preocupar com as tarefas agendadas.

As desvantagens

Como não temos um daemon pra verificar a hora, e chamar as tarefas, dependemos de um visitante (humano ou não) pra executar as tarefas. Em cada acesso ao site, o WordPress checa se existe alguma tarefa que já deveria ter sido executada. Caso exista, ele executa. Simples assim.

Um problema nisso é que não há garantia de que a tarefa será executada precisamente no horário agendado, mas sim, no primeiro acesso após esse horário (que pode ser segundos, num site muito visitado, ou minutos/horas em um site com quase nenhum acesso).Caso a rotina que se queira agendar seja sensível a hora, é melhor usar os métodos convencionais.

Conclusão

Usar a funcionalidade de agendamento do WordPress pode ser uma boa alternativa, principalmente quando não há preocupação com o “quando” a tarefa será executada, ou quando não se tem acesso aos sistemas de agendamento do servidor, o que pode ser comum em ambientes compartilhados.

Artigos relacionados

Arquivado em programação
Tags: , ,

Feed RSS para os comentários deste artigo.


Um comentário em “Agendando eventos no WordPress”

  1. Jacy comentou:

    Parabéns Bruno! Perfeito o site!
    Vou divulgar!
    Beijos!


Copyright 2009 Ataraxia!   Sinopse