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.