Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

How/where can I disable WP email notifications for commenting on own posts?

I want to do this globally for all users on the site, not only per-user through WP admin.

Are there any hooks which I can use to cancel these emails?

Thanks!

share|improve this question
    
    
Thanks but that doesn't help - it's about a hack of a contributed plugin. –  Ivanhoe123 Jul 8 '13 at 12:38

1 Answer 1

The function that sends emails to the post author is called wp_notify_postauthor() and is located in /wp-includes/pluggable.php. This means that the function is "pluggable" and can be overridden by another function with the same name. We can make a simple plugin to do this.

This is the code we'll be adding to the function to check if the author is posting on his own comment.

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

And here is the completed plugin for Wordpress version 3.6. This needs to be saved in a PHP file called custom-author-notification.php and saved in a folder called custom-author-notification in your plugins directory /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;
share|improve this answer
    
Thanks a lot for the answer - will check it and post back. –  Ivanhoe123 Sep 1 '13 at 10:56

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.