web-dev-qa-db-ja.com

投稿者のコメント通知を無効にする

クライアントのサイトの投稿者(またはサイトの管理者以外のユーザー)のコメント通知を無効にしようとしています。プラグイン可能な関数wp_notify_postauthorを使用するプラグインを作成しようとしましたが、効果がないようです。

これがプラグインコードです。

<?php
/**
 *
 *
 * @package   Disable_plugin_notifications
 * @author    Me
 * @link      <hidden>

 *
 * @wordpress-plugin
 * Plugin Name:       Disable Comment Notifications
 * Plugin URI:        <hidden>
 * Description:       <hidden>
 * Version:           1.0.0
 * Author:            <hidden>
 * Author URI:        <hidden>
 */


// Disabling comment notifications for post authors
if ( !function_exists( 'wp_notify_postauthor' ) ) {
    function wp_notify_postauthor() {
        return;
    }
}

関数内に 'return'を付けずに試してみました。

4
Tim McClure

私はwp_notify_postauthor()関数のソースを見て、 comment_notification_recipients filterに気付きました。

私はあなたがあなたのプラグインを以下のコードスニペットに単純化することができるかどうか疑問に思う:

<?php
 /** 
  * Plugin Name: Disable comment/trackback/pingback notifications emails 
  * Plugin URI:  http://wordpress.stackexchange.com/a/150141/26350
  */

add_filter( 'comment_notification_recipients', '__return_empty_array', PHP_INT_MAX );
add_filter( 'comment_moderation_recipients',   '__return_empty_array', PHP_INT_MAX );

通知メールが送信されないように、空の$emails配列を使用します。

最初のフィルタはwp_notify_postauthor()を停止し、2番目のフィルタはwp_notify_moderator()を停止します。

admin ユーザーだけにEメール通知を受信させたい場合は、このバージョンを使用できます。

<?php
 /** 
  * Plugin Name: Disable comment/trackback/pingback notifications emails except for admins.
  * Plugin URI:  http://wordpress.stackexchange.com/a/150141/26350
  */

add_filter( 'comment_notification_recipients', '__return_empty_array', PHP_INT_MAX );
add_filter( 'comment_moderation_recipients', 
    function( $emails )
    {
        // only send notification to the admin:
        return array( get_option( 'admin_email' ) );
    }
, PHP_INT_MAX );

これら2つのプラグイン可能な関数をオーバーライドすることもできますが、ここでは使用しません。

5
birgire

@ birgireのいい答えをフォローして、他にもいくつかのバリエーションがあります。

1)送信リストから特定のEメールを削除する

<?php
 /**
  * Plugin Name: Disable comment/trackback/pingback notifications for specific users.
  */
function squarecandy_eliminate_admin_comment_emails( $emails ) {
    // do not send to these specific emails
    $donotsend = array(
        '[email protected]',
        '[email protected]',
    );
    foreach ( $emails as $key => $email ) {
        if ( in_array( $email, $donotsend ) ) {
            unset( $emails[$key] );
        }
    }
    return $emails;
}
add_filter( 'comment_notification_recipients', 'squarecandy_eliminate_admin_comment_emails', PHP_INT_MAX );
add_filter( 'comment_moderation_recipients', 'squarecandy_eliminate_admin_comment_emails', PHP_INT_MAX );

2)特定の役割内のすべてのユーザーへのコメント通知の送信を停止する

<?php
 /**
  * Plugin Name: Disable comment/trackback/pingback notifications emails except for certain roles.
  */
function squarecandy_eliminate_admin_comment_emails( $emails ) {
    // get all the users of the roles you want to restrict
    $users = get_users( 
        array(
            'role__in' => array(
                // this is the list of roles to repress comment notifications for
                'Editor',
                'Author',
            ),
            'fields' => array(
                'user_email',
            ),
        ),
    );
    // make an array of the emails not to send to
    $donotsend = array();
    foreach ( $users as $user ) {
        $donotsend[] = $user->user_email;
    }

    foreach ( $emails as $key => $email ) {
        if ( in_array( $email, $donotsend ) ) {
            unset( $emails[$key] );
        }
    }
    return $emails;
}
add_filter( 'comment_notification_recipients', 'squarecandy_eliminate_admin_comment_emails', PHP_INT_MAX );
add_filter( 'comment_moderation_recipients', 'squarecandy_eliminate_admin_comment_emails', PHP_INT_MAX );
0
squarecandy