web-dev-qa-db-fra.com

Désactiver WP notifications pour commenter ses propres publications

Comment/où puis-je désactiver WP notifications par courrier électronique pour les commentaires sur ses propres publications?

Je souhaite le faire globalement pour tous les utilisateurs du site, et pas seulement par utilisateur via WP admin.

Existe-t-il des points d'ancrage que je peux utiliser pour annuler ces courriels?

Merci!

2
Aram Boyajyan

La fonction qui envoie des courriels à l'auteur du message s'appelle wp_notify_postauthor() et se trouve dans /wp-includes/pluggable.php. Cela signifie que la fonction est "connectable" et peut être remplacée par une autre fonction portant le même nom. Nous pouvons créer un simple plugin pour le faire.

C'est le code que nous allons ajouter à la fonction pour vérifier si l'auteur poste sur son propre commentaire.

if ( $comment->comment_author_email == $author->user_email ) {
     return false;
}

Et voici le plugin complet pour Wordpress version 3.6. Cela doit être enregistré dans un fichier PHP appelé custom-author-notification.php et enregistré dans un dossier appelé custom-author-notification dans le répertoire de vos plugins /wp-content/plugins/.

<?php
/*
Plugin Name: Custom Author Notification
Description: Stops authors from receiving emails when they comment on their own posts. Replaces the default wp_notify_postauthor() function in Wordpress v3.6.
Version: 1.0
*/

if ( ! function_exists('wp_notify_postauthor') ) :
function wp_notify_postauthor( $comment_id, $comment_type = '' ) {

$comment = get_comment( $comment_id );
$post    = get_post( $comment->comment_post_ID );
$author  = get_userdata( $post->post_author );

// The comment was left by the author
if ( $comment->user_id == $post->post_author )
    return false;

// The comment was also left by the author.
// Checks comment author email against post author email.
if ( $comment->comment_author_email == $author->user_email ) {
        return false;
}

// The author moderated a comment on his own post
if ( $post->post_author == get_current_user_id() )
    return false;

// The post author is no longer a member of the blog
if ( ! user_can( $post->post_author, 'read_post', $post->ID ) )
    return false;

// If there's no email to send the comment to
if ( '' == $author->user_email )
    return false;

$comment_author_domain = @gethostbyaddr($comment->comment_author_IP);

// The blogname option is escaped with esc_html on the way into the database in sanitize_option
// we want to reverse this for the plain text arena of emails.
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

if ( empty( $comment_type ) ) $comment_type = 'comment';

if ('comment' == $comment_type) {
    $notify_message  = sprintf( __( 'New comment on your post "%s"' ), $post->post_title ) . "\r\n";
    /* translators: 1: comment author, 2: author IP, 3: author domain */
    $notify_message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    $notify_message .= sprintf( __('E-mail : %s'), $comment->comment_author_email ) . "\r\n";
    $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
    $notify_message .= sprintf( __('Whois  : http://whois.arin.net/rest/ip/%s'), $comment->comment_author_IP ) . "\r\n";
    $notify_message .= __('Comment: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
    $notify_message .= __('You can see all comments on this post here: ') . "\r\n";
    /* translators: 1: blog name, 2: post title */
    $subject = sprintf( __('[%1$s] Comment: "%2$s"'), $blogname, $post->post_title );
} elseif ('trackback' == $comment_type) {
    $notify_message  = sprintf( __( 'New trackback on your post "%s"' ), $post->post_title ) . "\r\n";
    /* translators: 1: website name, 2: author IP, 3: author domain */
    $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
    $notify_message .= __('Excerpt: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
    $notify_message .= __('You can see all trackbacks on this post here: ') . "\r\n";
    /* translators: 1: blog name, 2: post title */
    $subject = sprintf( __('[%1$s] Trackback: "%2$s"'), $blogname, $post->post_title );
} elseif ('pingback' == $comment_type) {
    $notify_message  = sprintf( __( 'New pingback on your post "%s"' ), $post->post_title ) . "\r\n";
    /* translators: 1: comment author, 2: author IP, 3: author domain */
    $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
    $notify_message .= __('Excerpt: ') . "\r\n" . sprintf('[...] %s [...]', $comment->comment_content ) . "\r\n\r\n";
    $notify_message .= __('You can see all pingbacks on this post here: ') . "\r\n";
    /* translators: 1: blog name, 2: post title */
    $subject = sprintf( __('[%1$s] Pingback: "%2$s"'), $blogname, $post->post_title );
}
$notify_message .= get_permalink($comment->comment_post_ID) . "#comments\r\n\r\n";
$notify_message .= sprintf( __('Permalink: %s'), get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment_id ) . "\r\n";

if ( user_can( $post->post_author, 'edit_comment', $comment_id ) ) {
    if ( EMPTY_TRASH_DAYS )
        $notify_message .= sprintf( __('Trash it: %s'), admin_url("comment.php?action=trash&c=$comment_id") ) . "\r\n";
    else
        $notify_message .= sprintf( __('Delete it: %s'), admin_url("comment.php?action=delete&c=$comment_id") ) . "\r\n";
    $notify_message .= sprintf( __('Spam it: %s'), admin_url("comment.php?action=spam&c=$comment_id") ) . "\r\n";
}

$wp_email = 'wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));

if ( '' == $comment->comment_author ) {
    $from = "From: \"$blogname\" <$wp_email>";
    if ( '' != $comment->comment_author_email )
        $reply_to = "Reply-To: $comment->comment_author_email";
} else {
    $from = "From: \"$comment->comment_author\" <$wp_email>";
    if ( '' != $comment->comment_author_email )
        $reply_to = "Reply-To: \"$comment->comment_author_email\" <$comment->comment_author_email>";
}

$message_headers = "$from\n"
    . "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"\n";

if ( isset($reply_to) )
    $message_headers .= $reply_to . "\n";

$notify_message = apply_filters('comment_notification_text', $notify_message, $comment_id);
$subject = apply_filters('comment_notification_subject', $subject, $comment_id);
$message_headers = apply_filters('comment_notification_headers', $message_headers, $comment_id);

@wp_mail( $author->user_email, $subject, $notify_message, $message_headers );

return true;
}
endif;
2
epilektric