Automatizando o WordPress

Vamos conhecer neste post várias ferramentas e métodos para automatizar algumas ações do WordPress e com isso ganhar tempo e possibilidade de deixar de lado algumas demandas.

Para isso, vamos falar de alguns plugins e também nos aventurar com os códigos para personalizar e simplificar de acordo com o que pede cada demanda.

Neste processo de automatização vamos usar muitos hooks, filters e actions do WordPress. Portanto, é importante que você conheça como estes itens funcionam (dê uma olhada neste post aqui)

Alertas por email

Muitas vezes você deseja manter um controle do que está acontecendo no seu blog, o que seus autores estão fazendo. Uma das formas de fazer isso é criando avisos por e-mail e sempre que alguma atividade acontecer na administração do seu WP, em algum post ou página, você recebe um aviso por e-mail. Um modo fácil de fazer isso é usando um plugin, e como exemplo temos o Email Post Changes que é produzido pela Automattic e outros 4 desenvolvedores.

Instalando e ativando esse plugin, vai aparecer na sua administração em Configuração um item chamado Email Post Changes.

email-post-changes
Clicando nesse item você pode configurar como o plugin deve se comportar e avisar você sobre as ocorrências, as configurações são bem simples, veja:

  • Ativar – Permite você ligar ou desligar os avisos por email;
  • Email de Usuários – Escolha quais usuários devem receber os avisos;
  • Emails Adicionais – Você pode adicionar e-mails que não necessariamente sejam usuários do WordPress para receber as notificações também;
  • Post Types – Escolha quais tipos de posts você deseja monitorar;
  • Rascunhos – Se você deseja receber notificações a cada rascunho salvo também.

Muito provável que o plugin use o action save_post para ativar essas funções e disparar um e-mail sempre que esse action for ativado. Sabendo disso, podemos nos aventurar e criar nossa própria função (no functions.php) e fazer o mesmo, veja esse exemplo do próprio codex do WordPress:

 function my_project_updated_send_email( $post_id ) {// Se esta é apenas uma revisão, não enviar o e-mail.if ( wp_is_post_revision( $post_id ) )return;$post_title = get_the_title( $post_id );$post_url = get_permalink( $post_id );$subject = 'Um post foi atualizado';$message = "Um post foi atualizado em seu site:\n\n";$message .= $post_title . ": " . $post_url;// Envia email para o administrador.wp_mail( '[email protected]', $subject, $message );}add_action( 'save_post', 'my_project_updated_send_email' );

Nessa função especificamente, ele ignora os rascunhos e dispara um e-mail para o e-mail do administrador (setado dentro da função) avisando que um post foi atualizado. Simples não? Que tal testar aí no seu projeto?

Eventos programados
Expirando eventos

Criando posts e páginas automaticamente

Esse recurso pode ser necessário em muitas ocasiões, que é criar um post ou página automaticamente a partir de uma determinada ação. A primeira vez que usei isso foi onde o cliente precisava que ao ser criado um evento no custom post type Eventos, automaticamente o WordPress criasse um post com o mesmo título e o deixasse em rascunho para a pessoa responsável pelo blog preenche-lo com as informações do evento e o publicasse assim que acontecesse.

Depois disso acabei por usar a mesma função em diversos temas que desenvolvo. Apliquei a função e o “disparador” que usei aqui foi quando o tema é ativado. Com isso ao ativar esse tema, crio por exemplo algumas páginas que são dependentes, como Contatos, Localização e outras. E no mesmo momento já configuro os permalinks da forma que uso (/postname). Observe que ao final da função eu faço um update_option e seleciono a forma que desejo meus permalinks, nesse caso /%postname%/

Veja nesse trecho de código como faço isso:

/**
 * Cria página automaticamente ao ativer o tema.
 * Testado em WP 3.8.1
 */
if (isset($_GET['activated']) && is_admin()){
 $page_title = 'Página Automática';
 $page_content = 'Adicione aqui, caso deseje que a página seja criada com algo no content';
 $page_template = 'page-automatica.php'; // Caso não queira um page template, apague essa linha.
 $page_check = get_page_by_title( $page_title );
 $page = array(
 'post_type' => 'page',
 'post_title' => $page_title,
 'post_content' => $page_content,
 'post_status' => 'publish',
 'post_author' => 1,
 );
 if(!isset( $page_check->ID )){
 $page_id = wp_insert_post( $page );
 if( !empty( $page_template ) ){
 update_post_meta( $page_id, '_wp_page_template', $page_template );
 }
 }
 update_option( 'permalink_structure', '/%postname%/' );
}

É possível avancar e mesclar essa função com anterior para criar avisos. Ou mesmo criar usuários, categorias e muitas outras coisas.

Um cuidado importante com esse tipo de atividade, quando estiver se aventurando, é de determinar o que vai disparar essa ação. Acima usei uma condição para determinar que ela só deve ocorrer quando o tema for ativado. Não fazendo isso, a função iria entrar em loop infinito e criar páginas e posts até o WordPress travar, ou seja, uma centena ou milhar desses. Abaixo, segue um outra função que sempre que um termo for criado em uma determinada taxonomia, ele vai criar uma página usando o nome desse termo. Usei isso porque eles precisavam ter uma descrição mais avançada para cada termo, com vídeos, fotos e textos. Ele guarda como rascunho para então algum administrador alimentar essa página.

function create_page_description( $term_id, $tt_id, $taxonomy ) {
 $term = get_term_by('id', $tt_id, 'categoria');
 $post = array();
 $post['post_type'] = 'page';
 $post['post_content'] = 'Adicione aqui a descrição para a categoria <strong>'.$term->name.'</strong>.';
 $post['post_status'] = 'draft';
 $post['post_title'] = $term->name;
 $postid = wp_insert_post ( $post );
}

add_action( 'created_term', 'create_page_description', 10, 3 );

Com isso, eliminei a necessidade do usuário ter que criar a página e acabar usando um nome diferente, o que prejudicaria a forma como solucionei aquele trabalho. Melhorando isso, podemos colocar aviso por e-mail aqui e então uma outra pessoa seria alertada para alimentar esse conteúdo.

Distribuindo automaticamente

Essa é uma das funcionalidades mais solicitadas por quase todos os clientes,  que é fazer com que o WordPress distribua seu conteúdo automaticamente entre as redes sociais, seguidores e até mesmo outros blogs. Normalmente eu uso o JetPack para fazer isso com o Publicize.

jet-pack   Com o plugin instalado (e configurado) você vai observar que na sua área de publicar o post ele vai adicionar um item com o status das redes sociais que você configurou e que vão receber um resumo desse seu post no momento em que clicar em Publicar. Por padrão esse plugin usa o título, um resumo e a imagem de destaque que usou no post.   Existe também outras opções para automatizar esse serviço com outros plugins, por exemplo:

  • Network Publisher
  • Social
  • NextScripts: Social Networks Auto-Poster

Agendando posts

Os agendamentos de posts é nativo do WordPress e não precisa de nada a mais para funcionar.

Para agendar um post, na tela de criação/edição de posts, no box superior direito onde você publica o post, possui um item chamado “Publicar automaticamente”, clicando no Editar desse item, aparecem novos campos para você escolher data e horário para o WordPress publicar esse post automaticamente para você.
agendando-post

Isso é muito útil em sites ou blogs que possuem uma frequência muito alta de publicações e com isso, programar para que as publicações sejam lançadas em horários específicos e assim conseguir atingir um número maior de pessoas.
Ou mesmo para quem quer organizar as publicações de um mês inteiro, para que elas sejam publicadas uma por dia por exemplo.

A função de agendamento às vezes pode ser um pouco problemática, resultado em atrasos na publicação automática. Se você notar isso em algum momento, não deixe de ver como resolver o problema de agendamento de post perdido, de que já tratamos aqui no blog!

Agendando eventos com wp_schedule_event

A wp_schedule_event() é uma função pouco conhecida pelos fóruns e iniciantes de WordPress. Eu mesmo era um desses até há pouco tempo atrás. Conheci essa função quando estava desenvolvendo um sistema de eventos e precisava que após a data desse evento, os posts sofressem alguma alteração, nesse caso coloquei como rascunho. Ou seja, essa função funciona muito parecida com o cron, nela você estabelece o tempo da rotina (diário, por hora, por semana) e uma função a ser executada. E então, o primeiro acionamento do WordPress após esse tempo estipulado, a função vai rodar e fazer o que você planejou.

Veja esse exemplo do Codex:

add_action( 'wp', 'prefix_setup_schedule' );
/**
 * Verifica se o evento está programado, se não o agenda.
 */
function prefix_setup_schedule() {
 if ( ! wp_next_scheduled( 'prefix_hourly_event' ) ) {
 wp_schedule_event( time(), 'hourly', 'prefix_hourly_event');
 }
}
add_action( 'prefix_hourly_event', 'prefix_do_this_hourly' );
/**
 * Roda uma função no hook programado.
 */
function prefix_do_this_hourly() {
 // o que fará a cada hora
}

 

Conclusão

Existem muitas outras formas de fazer o WordPress ficar o mais automatizado possível. Há os plugins que enviam suas fotos para Pinterest, Instagram e outras redes sociais mais focadas em imagens. Nos códigos, existem também muitas formas de fazer isso. Esse post é apenas a ponta de um iceberg, mas com ele você vai ao menos perceber que muitas das suas demandas podem ser automatizadas. É preciso apenas observar o problema e procurar uma solução dentre esses exemplos e muitos outros que as funções do WordPress oferecem!

 

2 comentários

  1. Muito interessante o seu blog. Ajuda bastante os novatos, que assim como eu, estamos chegando agora. Permita-me uma sugestão de um plugin nesta lista:
    Post Espirator
    https://wordpress.org/plugins/post-expirator/

    Como trabalho administrando um site de prefeitura, é muito comum a exibição de comunicados que tem uma determinada duração. E esse plugin ajuda bastante nessa tarefa de programar a data ou mudar a categoria.

    Branco Sousa.

Deixe um comentário para AlexCancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *