Como o WordPress Cron funciona

Publicados: 2021-12-03

Você já se perguntou o que é o WP-Cron? Se sim, então este é o artigo perfeito para você aprender tudo o que precisa saber sobre as tarefas agendadas do WordPress.

Cron (Command Run On) é um utilitário iniciado em sistemas UNIX e posteriormente desenvolvido nas distribuições LINUX que foram propostas como um agendador de tarefas baseado em tempo.

Um cron job é uma tarefa que é executada repetidamente ou como uma tarefa única. Ao longo dos anos, tem sido usado principalmente como uma ferramenta de administração do sistema para executar tarefas automaticamente.

Cron do WordPress

Ao executar um site WordPress, algumas tarefas são executadas em segundo plano que precisam ser executadas periodicamente, como verificar atualizações de temas e plugins, postagens agendadas, transientes a serem excluídos e muito mais. Essas tarefas agendadas baseadas em tempo são tratadas pelo WP-Cron.

Em sua instalação do WordPress, o arquivo relacionado aos cron jobs é o arquivo wp-cron.php , localizado na pasta raiz de sua instalação.

O arquivo wp-cron.php contém o código para as tarefas automatizadas relacionadas a atualizações e postagens.

Como funciona

O WP-Cron verifica a lista de tarefas em cada carregamento de página e executa de acordo.

Se no momento em que a página for carregada, uma tarefa estiver vencida, ela será adicionada a uma fila. Dessa forma, o WordPress garante que até mesmo os eventos devidos serão disparados e não serão ignorados e, eventualmente, todas as tarefas serão executadas nesse carregamento de página.

É natural que isso pareça irracional para você, mas pense na alternativa. Em um ambiente de hospedagem compartilhada, como é a maioria, você deve ter acesso aos comandos do servidor para controlar essas tarefas como achar melhor, mas isso não seria arriscado para o servidor?

Portanto, considere o que o WordPress faz como uma solução alternativa nessa situação. No entanto, isso tem algumas desvantagens que examinaremos em um momento.

O plug-in WP-Crontrol

Uma maneira ótima e fácil de visualizar a lista de cron jobs em seu site WordPress é instalar o plugin WP-Crontrol.

Após ativá-lo, você pode visualizar a página de administração do plugin no item de menu Ferramentas->Cron Events. Em uma instalação vanilla você verá algo assim:

Se você passar o mouse sobre cada linha, notará que existem ações fornecidas para você editar ou executar qualquer um dos eventos.

Na tela de edição do evento wp_update_themes, por exemplo, você pode modificar suas configurações

No item de menu Configurações -> Cron Schedules, você pode visualizar os agendamentos padrão e, se desejar, adicionar um de sua preferência e dar-lhe um nome para ser visualizado na lista.

Como criar um trabalho Cron

Para adicionar um cron job manualmente, tudo que você precisa fazer é editar o arquivo functions.php do tema. Para demonstrar um exemplo simples, abra-o com seu editor favorito e adicione o seguinte trecho de código:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }

Onde 'my_cronjob' é o nome do seu gancho e 'my_cronjob_function' é o nome da sua função que simplesmente enviará um email para o endereço que você definiu substituindo EMAIL_ADDRESS pelo desejado.

Em seguida, precisamos agendar esse gancho para ser executado na hora que quisermos.

Como executar o trabalho uma vez

Para executar a ação como um trabalho WP-Cron único, temos que usar a função interna do WordPress wp_schedule_single_event() projetada para acionar um gancho em um horário especificado. Sua estrutura é assim:

wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )

Onde $timestamp é o timestamp Unix para quando executar o evento em seguida e $hook é o gancho de ação a ser executado quando o evento for executado.

Ambos os parâmetros são necessários. Agora vamos falar sobre os parâmetros opcionais.

Com o parâmetro $args você pode usar um array contendo argumentos, para passar para a função callback do gancho. Cada valor na matriz é passado para o retorno de chamada como um parâmetro individual. As chaves de matriz são ignoradas.

O parâmetro $wp_error pode ser usado para retornar um WP_Error em caso de falha. Seu valor padrão é false.

O código correspondente em nosso arquivo functions.php seria assim:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } wp_schedule_single_event( time() + 3600, 'my_cronjob' );

Neste ponto, você poderá ver sua tarefa personalizada na lista.

Como executar o trabalho como um evento recorrente

O que o WordPress fornece para este cenário é a função wp_schedule_event() que é estruturada assim

wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)

O parâmetro $timestamp é o timestamp Unix necessário para quando executar o evento em seguida, $recurrence é uma string também necessária para a frequência com que o evento deve se repetir e $hook é o gancho de ação a ser executado quando o evento é executado.

Os parâmetros opcionais $args e $wp_error são os mesmos de antes.

O código que executa o trabalho com recorrência de, digamos, 1 hora é este:

 add_action('my_hourly_cronjob', 'hourly_action'); function hourly_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_hourly_cronjob' )) { wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob'); }

Usamos a função wp_next_scheduled() em uma instrução 'if' como você vê acima, para evitar eventos duplicados e garantir que a tarefa ainda não esteja agendada antes de prosseguir e executá-la.

Também usamos o rótulo 'por hora' da tabela agendada em Configurações -> Cron Schedules. Se quisermos uma ocorrência diferente, digamos a cada 45 minutos, devemos primeiro criar um Cron Schedule personalizado chamado “45_minutes” e depois usá-lo no código.

 add_action('my_45_cronjob', 'my_45_action'); function my_45_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_45_cronjob' )) { wp_schedule_event(time(), '45_minutes', 'my_45_cronjob'); }

Neste ponto, você poderá ver sua tarefa personalizada na lista com as alterações esperadas:

Desvantagens do WP-Cron

A forma como o WordPress lida com cron jobs garante que a tarefa seja executada, mas não permite que você especifique quando porque, como dissemos, a verificação é feita quando um visitante carrega uma página do seu site.

Se retransmitirmos o controle de cron jobs no tempo de visita dos usuários, é possível que tenhamos um impacto negativo no site, independentemente do tamanho ou da popularidade.

Hospede seu site com a Pressidium

GARANTIA DE DEVOLUÇÃO DO DINHEIRO DE 60 DIAS

VEJA NOSSOS PLANOS

No caso de um site popular, você experimentará uma grande quantidade de tráfego devido à execução simultânea de um grande número de tarefas. Isso pode consumir os recursos do seu servidor e afetar o desempenho ou até mesmo causar inatividade do seu site.

No caso de um site pequeno, o que significa poucos visitantes, o wp-cron não será acionado com tanta frequência, portanto, alguns cron jobs importantes podem ser adiados por tempo suficiente para criar efeitos colaterais, como não fazer backups suficientes ou atrasar a atualização de alguns dados que são contados em uma tarefa cron.

Desativar WP-Cron

Se a maneira como o WP-Cron lida com tarefas cron não atende aos seus requisitos e você precisa que as tarefas sejam executadas na hora certa, desative o WP-Cron e use um serviço cron do lado do servidor.

Se desabilitar o WP-Cron não for uma opção já fornecida pelo seu provedor de hospedagem, veja como você pode fazer isso sozinho.

Abra o arquivo wp-config.php , localizado na pasta raiz de sua instalação, com seu editor favorito e encontre as linhas relacionadas ao prefixo da tabela do banco de dados. Logo após, insira esta linha:

 // /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wN0b9WQk_'; define('DISABLE_WP_CRON', 'true');

Isso é obrigatório se você quiser usar um agendador mais estável, como o serviço cron do Linux, para acionar o wp-cron.php sempre que melhor lhe convier.

Uma solução do lado do servidor: o serviço Cron do Linux

Na Pressidium, usamos o Linux Crontab para acionar o WP-Cron a cada 5 minutos. É a quantidade certa de tempo que garante que seus trabalhos agendados sejam executados no prazo e, ao mesmo tempo, evite sobrecarregar seu site WordPress. Isso não interfere no escalonador WP-Cron, mas apenas no mecanismo de disparo.

Conclusão

Espero que este artigo tenha ajudado você a se familiarizar com o WordPress Cron, o que é e como funciona e como criar seus próprios horários e tarefas. Pense duas vezes se o WP-Cron é suficiente para suas necessidades, antes de escolher outras soluções do lado do servidor.