it-swarm.com.de

Deaktivieren der Kommentarbenachrichtigung für den Beitragsautor

Ich versuche, Kommentarbenachrichtigungen für Postautoren (oder andere Personen außer dem Administrator der Site) für die Site eines Kunden zu deaktivieren. Ich habe versucht, ein Plugin zu erstellen, das die Plug-in-Funktion wp_notify_postauthor verwendet, aber es scheint keinen Effekt zu haben.

Hier ist der Plugin-Code:

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

Ich habe es auch versucht, ohne die "Rückkehr" in der Funktion.

4
Tim McClure

Ich überflog die Quelle der Funktion wp_notify_postauthor() und bemerkte den Filter comment_notification_recipients .

Ich frage mich, ob Sie Ihr Plugin mit dem folgenden Code-Snippet vereinfachen könnten:

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

dabei verwenden wir ein leeres $emails-Array, um zu verhindern, dass Benachrichtigungs-E-Mails gesendet werden.

Der erste Filter stoppt wp_notify_postauthor() und der zweite stoppt wp_notify_moderator().

Wenn nur der Benutzer admin E-Mail-Benachrichtigungen erhalten soll, können Sie diese Version verwenden:

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

Wir könnten diese beiden steckbaren Funktionen auch überschreiben, aber ich benutze das hier nicht.

5
birgire

Im Anschluss an die Antwort von @ birgire in Nice gibt es noch einige andere Variationen:

1) Beseitigen Sie bestimmte E-Mails aus der Sendeliste

<?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) Stoppen Sie das Senden von Kommentarbenachrichtigungen an alle Benutzer in bestimmten Rollen

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