web-dev-qa-db-fra.com

Désactivation des notifications de commentaire pour Post Author

J'essaie de désactiver les notifications de commentaire pour les auteurs de publication (ou toute autre personne en dehors de l'administrateur du site) pour le site d'un client. J'ai essayé de créer un plugin qui utilise la fonction plug-in wp_notify_postauthor, mais cela ne semble pas avoir d'effet.

Voici le code du plugin:

<?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;
    }
}

Je l'ai également essayé sans le "retour" dans la fonction.

4
Tim McClure

J'ai parcouru la source de la fonction wp_notify_postauthor() et remarqué le filtre comment_notification_recipients .

Je me demande si vous pourriez simplifier votre plug-in avec l'extrait de code suivant:

<?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 );

où nous utilisons un tableau $emails vide pour empêcher l’envoi de courriers électroniques de notification.

Le premier filtre doit arrêter wp_notify_postauthor() et le second arrêter wp_notify_moderator().

Si vous souhaitez que seul l'utilisateur admin reçoive des notifications par courrier électronique, vous pouvez utiliser cette version:

<?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 );

Nous pourrions également remplacer ces deux fonctions enfichables, mais je ne l'utilise pas ici.

5
birgire

Pour faire suite à la réponse de @ birgire à Nice, voici quelques autres variantes:

1) Éliminer des emails spécifiques de la liste d'envoi

<?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) Arrêtez d'envoyer des notifications de commentaires à tous les utilisateurs dans certains rôles

<?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