Back-End

24 jul, 2013

Enviando um e-mail para todos usuários do WordPress a cada post

Publicidade

Esta semana, esbarrei em uma ideia de um dos clientes aqui da agência: enviar um e-mail para todos os usuários cadastrados no WordPress a cada post.

É uma ideia um tanto quanto diferente, mas interessante e usual. Só que deve ser usada com cuidado.

Vamos primeiro ao código; depois a algumas considerações.

Primeiro, vamos à função de busca de todos os usuários e colocá-los em uma query.

function notify_users_email($post_ID) {
 $wp_user_search = new WP_User_Query( array( 'fields' => array('user_email') ) );
 $usersarray = $wp_user_search->get_results();
 $arrUsers = array ();
 for ($arr = $usersarray, $mU = count ($arr), $iU = 0; $iU < $mU; $iU++) {
 $arrUsers[] = $arr[$iU]->user_email;
 }
 $users = implode(",", $arrUsers);

Agora que temos a query pronta com todos os usuários, vamos criar a função de envio do e-mail.

mail($users, "New post notification :" . get_bloginfo('name') , 
"A new post has been published on" . get_bloginfo('siteurl') );
 return $post_ID; }

Esse é um e-mail básico, que pode ser facilmente personalizado de acordo com seu gosto.

Agora chamamos a função publish_post nativa do WordPress. Essa função é chamada toda vez que um post é publicado.

add_action('publish_post', 'notify_users_email');

Pronto, temos nossa notificação pronta. Esse código pode ser colocado no functions.php

Considerações

Esse código tem que ser usado com cuidado. Evite utilizá-lo em instalações com grande números de usuários, caso esteja utilizando uma hospedagem compartilhada.

A maioria das hospedagens tem um bloqueio automático, caso sejam enviados centenas de e-mails em um curto espaço de tempo. Veja com sua hospedagem essa quantidade, que varia de 100 a 250 e-mails/hora.

Caso queira ver esse código no GitHub e até melhorar alguma coisa, acesse este link.

E abaixo o código completo.

function notify_users_email($post_ID) {
$wp_user_search = new WP_User_Query( array( 'fields' => array('user_email') ) );
 $usersarray = $wp_user_search->get_results();
 $arrUsers = array ();
 for ($arr = $usersarray, $mU = count ($arr), $iU = 0; $iU < $mU; $iU++) {
 $arrUsers[] = $arr[$iU]->user_email;
 } 
 $users = implode(",", $arrUsers);

 mail($users, "New post notification :" . get_bloginfo('name') , 
"A new post has been published on" . get_bloginfo('siteurl') );
 return $post_ID;
}
add_action('publish_post', 'notify_users_email');

Até mais, pessoal.

Salaam Aleikum.