web-dev-qa-db-fra.com

Envoyer un email uniquement sur brouillon

J'essaie d'envoyer un courrier électronique uniquement lorsque vous enregistrez un message en tant que brouillon. Cela ne semble pas fonctionner avec le code actuel:

 add_action ('save_post', 'er_send_email_on_post_draft_save'); 
 
 function er_send_email_on_post_draft_save ($ post_id) {
 
 // ne vérifie pas la publication révision 
 if ($ post_id-> post_status == 'draft') {
 
 $ post_title = get_the_title ($ post_id); 
 $ post_url = get_permalink ($ post_id); 
 $ subject = 'Un message a été mis à jour'; 
 
 $ message = "Un message a été mis à jour sur votre site Web:\n\n"; 
 $ message. = "". $ post_title. "\ n\n"; 
 
 // envoyer un courrier électronique à admin 
 wp_mail ('[email protected]', $ subject, $ message); 
 
} 
} 

cela fonctionne si je change l'instruction if en:

! wp_is_post_revision ($ post_id) 

mais ce n'est pas ce que je veux, je veux seulement envoyer une notification si elle est enregistrée en tant que brouillon.

1
erichmond

$post_id est un entier (uniquement l'identifiant de la publication) et non un objet de publication (l'ensemble de la publication avec l'identifiant, le statut, le titre ...)

alors globalisez l'objet $post et vérifiez le statut à partir de là, par exemple:

function er_send_email_on_post_draft_save( $post_id ) {
    global $post;
    //verify post is not a revision
    if ( $post->post_status == 'draft' ) {

        $post_title = get_the_title( $post_id );
        $post_url = get_permalink( $post_id );
        $subject = 'A post has been updated';

        $message = "A post has been updated on your website:\n\n";
        $message .= "" .$post_title. "\n\n";

        //send email to admin
        wp_mail( '[email protected]', $subject, $message );

    }
}

et si vous le souhaitez, vous pouvez utiliser un crochet activé uniquement lorsque post est enregistré en tant que brouillon

add_action('draft_post', 'send_my_mail_on_draft' );
function send_my_mail_on_draft( $post_id,$post){
   $post_title = get_the_title( $post_id );
   $post_url = get_permalink( $post_id );
   $subject = 'A post has been updated';

   $message = "A post has been updated on your website:\n\n";
   $message .= "" .$post_title. "\n\n";

   //send email to admin
   wp_mail( '[email protected]', $subject, $message );
}
2
Bainternet

Essayez avec ceci:

function dddn_process($id) {

    // emails anyone on or above this level
    $email_user_level = 7;

    global $wpdb;

    $tp = $wpdb->prefix;

    $result = $wpdb->get_row("
        SELECT post_status, post_title, user_login, user_nicename, display_name 
        FROM {$tp}posts, {$tp}users 
        WHERE {$tp}posts.post_author = {$tp}users.ID 
        AND {$tp}posts.ID = '$id'
    ");

    if (($result->post_status == "draft") || ($result->post_status == "pending")) {

        $message = "";
        $message .= "Draft updated on '" . get_bloginfo('name') . "'\n\n";
        $message .= "Title: " . $result->post_title . "\n\n";

            // *** Choose one of the following options to show the author's name

        $message .= "Author: " . $result->display_name . "\n\n";
        // $message .= "Author: " . $result->user_nicename . "\n\n";
        // $message .= "Author: " . $result->user_login . "\n\n";

        $message .= "Link: " . get_permalink($id);

        $subject = "Draft updated on '" . get_bloginfo('name') . "'";


        $editors = $wpdb->get_results("SELECT user_id FROM {$tp}usermeta WHERE {$tp}usermeta.meta_value >= " . $email_user_level);

        $recipient = "";    

        foreach ($editors as $editor) {         
            $user_info = get_userdata($editor->user_id);
            $recipient .= $user_info->user_email . ','; 
        } 

        mail($recipient, $subject, $message);


    }

}


add_action('save_post', 'dddn_process');

?>

Il suffit de créer le fichier notification.php avec la description des plugins wp, de le télécharger dans le dossier plugins et de l'activer comme plugin classique

0
Eager2Learn