クライアントのサイトの投稿者(またはサイトの管理者以外のユーザー)のコメント通知を無効にしようとしています。プラグイン可能な関数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'を付けずに試してみました。
私は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つのプラグイン可能な関数をオーバーライドすることもできますが、ここでは使用しません。
@ 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 );