COMO CRIAR NOTIFICAÇÕES POR EMAIL SEMPRE QUE UM ARTIGO É PUBLICADO?

Para quem trabalha com WordPress para desenvolver projetos para clientes certamente já se deparou com inúmeras situações é que precisa de determinadas funcionalidades que o WordPress não suporte e/ou para as quais não existem plugins disponíveis que realizem essas mesmas acções. Quase todos nós já passámos por isso, com uma ou outra funcionalidade que daria realmente muito jeito ter funcionando em nosso projeto. E uma dessas funcionalidades é a notificação por email sempre que um artigo é publicado num blog com WordPress, por exemplo. Se você tiver uma equipe de redatores, seria interessante você poder contatá-los sempre que um determinado conteúdo é publicado. Os colegas do doitwithwp falaram recentemente nessa funcionalidade, a partir da qual seremos obrigados a trabalhar com a acção publish_posts e a função wp_mail para dispararmos um email para o autor assim que o seu conteúdo for publicado, por exemplo.

wordpressemail

 

O nosso objectivo vai passar por emails em HTML, e não apenas emails de texto, pelo que será necessário realizar alguns tweaks a fim de conseguirmos cumprir com o nosso objectivo. Você pode usar o filtro change_mail_type para fazer isto:

1
2
3
4
5
6
7
// SET EMAIL TYPE TO HTML
function change_mail_type() {
    return "text/html";
}
add_filter ("wp_mail_content_type", "change_mail_type");

Como queremos customizar o Nome e Endereço de Email do Auor dos emails gerados pelo WordPress, também teremos de trabalhar nesse sentido. Por padrão, o Nome é normalmente “WordPress” e o email é do tipo wordpress@seudominio.com, o que não é aceitável para um cliente, por exemplo. Para mudar isso, usaremos a seguinte função:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// SET EMAIL FROM ADDRESS
function change_mail_from() {
    return "geral@meudominio.com";
}
add_filter ("wp_mail_from", "change_mail_from");
// SET EMAIL FROM NAME
function change_from_name() {
    return "Empresa, Ltd.";
}
add_filter ("wp_mail_from_name", "change_from_name");

ENVIAR EMAILS NO TEMPO CERTO

Para enviarmos um email exatamente no momento em que um determinado conteúdo é publicado, ou uma encomenda é realizada no site do cliente, por exemplo, iremos também necessitar de escrever a função para esse efeito. Se imaginarmos o cenário de uma loja de E-Commerce, em que temos um custom post type do tipo hbos_orders, onde se encontra toda a informação da encomenda, o nosso objectivo passa logicamente por disparar um email assim que uma encomenda seja introduzida no nosso sistema, correto?

O que queremos fazer, é disparar um email assim que um determinado post ou página seja publicado: poderemos fazer isso usando um gancho para um custom post type em particular. Por exemplo, publish_posts é o gancho standard para quando os posts são publicados (e o publish_pages para páginas), mas caso esteja a usar um custom post type, então o gancho será algo como publish_custom_post_type (ou publish_hbos_orders neste caso específico).

USANDO A FUNÇÃO WP_MAIL

A funcção wp_mail requer obrigatoriamente três argumentos:

  • Para quem será enviada a mensagem
  • Qual o assunto do email
  • Qual o conteúdo do email

Como queremos que o email seja enviado para o autor do post, iremos usar o seguinte código para realizar essa acção:

1
2
3
$post = get_post($post_id);
$author = get_userdata($post->post_author);
$author_email = $author->user_email;

O assunto do email não precisa de ser dinâmico (embora possa ser), pelo que usaremos:

1
$email_subject = "Novo artigo publicado no Site XYZ";

Para construirmos o nosso template de HTML usaremos informações do artigo como o the_title e o get_post_meta. Vejamos então um cenário para uma possível encomenda de um cliente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ob_start(); ?>
<html>
    <head>
    </head>
    <body>
        <p>
            Olá <?php echo $author->user_firstname; ?>,
        </p>
        <p>
            Foi criada uma nova encomenda para si no nosso sistema.
        </p>
        <p>
            <strong>Detalhes da Encomenda:</strong><br />
            Número da Encomenda: <?php the_title(); ?><br/>
            Número de Autorização: <?php echo get_post_meta( $post->ID, 'order_auth_number', true ); ?>
        </p>
        <p>
            Faça Login para <a href="<?php echo get_permalink($post->ID) ?>">acompanhar a encomenda</a>.
        </p>
        <p>
            Obrigado,<br />
            Empresa, Ltd.
        </p>
    </body>
</html>
<?php
$message = ob_get_contents();
ob_end_clean();

Agora que temos tudo pronto, poderemos usar a nossa função wp_mail e enviar um email sempre que um artigo ou encomenda são colocados no nosso sistema. Colocando tudo corretamente nos seus lugares, teremos a seguinte funcionalidade:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
// SET EMAIL TYPE TO HTML
function change_mail_type() {
    return "text/html";
}
add_filter ("change_mail_type", "my_awesome_mail_content_type");
// SET EMAIL FROM ADDRESS
function change_mail_from() {
    return "geral@meudominio.com";
}
add_filter ("wp_mail_from", "change_mail_from");
// SET EMAIL FROM NAME
function change_from_name() {
    return "Empresa, Ltd.";
}
add_filter ("wp_mail_from_name", "change_from_name");
// SEND EMAIL ONCE ORDER IS CREATED
function notify_rep_new_order($post_id) {
    $post = get_post($post_id);
    $author = get_userdata($post->post_author);
    $author_email = $author->user_email;
    $email_subject = "Nova encomenda criada.";
    ob_start(); ?>
    <html>
        <head>
        </head>
            <body>
        <p>
            Olá <?php echo $author->user_firstname; ?>,
        </p>
        <p>
            Foi criada uma nova encomenda para si no nosso sistema.
        </p>
        <p>
            <strong>Detalhes da Encomenda:</strong><br />
            Número da Encomenda: <?php the_title(); ?><br/>
            Número de Autorização: <?php echo get_post_meta( $post->ID, 'order_auth_number', true ); ?>
        </p>
        <p>
            Faça Login para <a href="<?php echo get_permalink($post->ID) ?>">acompanhar a encomenda</a>.
        </p>
        <p>
            Obrigado,<br />
            Empresa, Ltd.
        </p>
            </body>
    </html>
    <?php
    $message = ob_get_contents();
    ob_end_clean();
    wp_mail( $author_email, $email_subject, $message );
}
add_action( 'publish_hbos_orders', 'notify_rep_new_order' );

Como pode ver, usámos a função wp_mail para enviar o email usando as informações recolhidas e fazemos disparar a função sempre que um post é publicado no nosso custom post type “hbos_orders” usando o gancho publish_hbos_orders. Logicamente, você poderá adaptar o código a diferentes outros custom post types, ou mesmo aos posts singulares do WordPress. As possibilidades são infinitas.

Abraços!

AVALIE GORA MESMO!
More from William Freitas

5 FUNÇÕES DAS REDES SOCIAIS QUE VOCÊ PODE USAR PARA VENCER SUA CONCORRÊNCIA

As redes sociais funcionam como uma das melhores ferramentas para construir uma...
Read More

Deixe uma resposta

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