Notificar os usuários sempre que uma nova postagem for publicada com base em sua preferência

4

Eu montei um formulário de registro personalizado no meu site WordPress e um dos itens no formulário de registro é a capacidade de selecionar um interesse.

Essencialmente eu tenho o seguinte código do formulário de registro ...

 update_usermeta( $user_id, 'interests', $_POST['interests'] );

Eu precisaria de um código que fizesse algo como, se "interesses" corresponder a "tag" de um novo post e, em seguida, enviar um email para o usuário.

Qualquer coisa assim é possível? Obrigado antecipadamente!

    
por Richard 18.12.2012 / 20:42

2 respostas

2

Veja este exemplo no pergunta 19259 .

A função foi init ao publicar uma postagem, alterar o gancho para o tipo de postagem ou usar no padrão post - Hook publish_post . Antes de enviar, marque a função do seu meta campo de usuário personalizado, como get_user_meta( $user_id, 'interests', TRUE ); e pronto para enviar as informações sobre o novo post.

Talvez confunda esta solução, mas não foi testada!

    add_action( 'publish_post', 'fb_send_mail_about_new_post' );
    function fb_send_mail_about_new_post( $post_id = FALSE ) {

        // check user meta data, if interest
        $interests = FALSE;
        $interests = get_user_meta( get_current_user_id(), 'interests', TRUE );
        if ( ! $interests )
            return NULL;

        if ( $post_id ) {
            // get data from current post
            $post_data = get_post( $post_id );
            //var_dump($post_data);exit; <-- see this for all content or use the id for get the revisons

            // get mail from author
            $user_mail = get_userdata( $post_data -> post_author );

            // email addresses
            $to = get_user_meta( get_current_user_id(), 'email', TRUE );
            // email subject
            $subject = get_option( 'blogname' ) . ': ' . $post_data -> post_title;
            // message content
            $message = $post_data->post_content . ' ' . PHP_EOL . 
                get_author_name( $post_data->post_author ) . ' ' . PHP_EOL . 
                get_permalink( $post_id );
            // create header data
            $headers = 'From: ' . 
                get_author_name( $post_data -> post_author ) . 
                ' (' . get_option( 'blogname' ) . ')' . 
                ' <' . $user_mail -> user_email . '>' . 
                PHP_EOL;
            // send mail
            wp_mail( 
                $to,
                $subject, 
                $message,
                $headers
            );
        }

        return $post_id;
    }

Uma outra maneira alternativa é usar um plugin e deixar muito tempo, como este plugin gratuito Informe sobre o conteúdo . O plug-in adiciona dois campos ao perfil do usuário para atualização de postagem e comentário via e-mail. Você pode melhorar com um plug-in personalizado para o site de registro para que novos usuários preencham estes campos.

    
por bueltge 19.12.2012 / 13:36
1

Por que reinventar a roda? Você deve conseguir conectar-se a wp_update_user e depois adicionar o e-mail do usuário / removê-lo por meio de um plug-in como inscreva-se2 com base no valor desse campo.

Se você quiser uma solução mais personalizada, crie seu próprio plug-in e faça algo como:

    class emailer {
  function send($post_ID)  {
    $friends = 'bob@example.org,susie@example.org';
    mail($friends,"sally's blog updated",'I just put something on my blog: http://blog.example.com');
    return $post_ID;
  }
}
$myEmailClass = new emailer();
add_action('publish_post', array($myEmailClass, 'send'));

Que é copiado e colado da API de plug-in

Isso teria que ser modificado com sua instrução if e um for-each, mas diferente do que deveria funcionar. Eu recomendaria apenas indo com a primeira opção embora.

    
por BandonRandon 18.12.2012 / 21:46

Tags