禁用WP通知以评论自己的帖子

时间:2013-07-05 作者:Aram Boyajyan

如何/在何处禁用WP电子邮件通知以对自己的帖子进行评论?

我想在全球范围内为网站上的所有用户做到这一点,而不仅仅是通过WP admin为每个用户做到这一点。

有没有什么钩子可以用来取消这些电子邮件?

谢谢

1 个回复
SO网友:epilektric

将电子邮件发送给帖子作者的函数称为wp_notify_postauthor() 位于/wp-includes/pluggable.php. 这意味着该函数是“可插拔的”,可以被另一个同名函数覆盖。我们可以制作一个简单的插件来实现这一点。

这是我们将添加到函数中的代码,用于检查作者是否发表了自己的评论。

if ( $comment->comment_author_email == $author->user_email ) {
     return false;
}
下面是Wordpress 3.6版的完整插件。这需要保存在一个名为custom-author-notification.php 并保存在名为custom-author-notification 在插件目录中/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;

结束

相关推荐

在AJAX请求中使用Email_Existes()wp函数

我正在请求wordpress功能if (email_exists($email)) { ... } 通过ajax从文件(email\\u check.php)中。但使用此函数会导致服务器错误。原点(来自输入文本字段): var check = $(\'#email-input\'); var email = check.val(); $.ajax({ url: \"email_check.php\", data: {\'email\' : email