web-dev-qa-db-fra.com

désactiver les e-mails d'enregistrement des nouveaux utilisateurs

J'aimerais désactiver les courriels que l'administrateur reçoit lorsqu'un nouvel utilisateur s'enregistre. Nous recevons beaucoup de courriels à cause des nouvelles inscriptions (ce sont des inscriptions légitimes), mais je ne veux tout simplement pas voir le courrier électronique me disant que quelqu'un s'est inscrit encore et encore.

Jusqu'à présent, j'ai essayé installer des plugins mais ils ne fonctionnent pas. (le support dit même qu'ils ne travaillent plus). Lors de la recherche ici, la seule question que j’ai pu trouver était Désactiver les courriels d’administrateur pour les nouvelles inscriptions d’utilisateurs qui date de trois ans et ne semble pas fonctionner non plus. J'ai essayé avec ce code:

// Redefine user notification function
if ( !function_exists('wp_new_user_notification') ) {
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
    $user = new WP_User($user_id);

    $user_login = stripslashes($user->user_login);
    $user_email = stripslashes($user->user_email);

    $message  = sprintf(__('New user registration on your blog %s:'), get_option('blogname')) . "rnrn";
    $message .= sprintf(__('Username: %s'), $user_login) . "rnrn";
    $message .= sprintf(__('E-mail: %s'), $user_email) . "rn";


      //  @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), get_option('blogname')), $message);

        if ( empty($plaintext_pass) )
            return;

        $message  = __('Hi there,') . "rnrn";
        $message .= sprintf(__("Welcome to %s! Here's how to log in:"), get_option('blogname')) . "rnrn";
        $message .= wp_login_url() . "rn";
        $message .= sprintf(__('Username: %s'), $user_login) . "rn";
        $message .= sprintf(__('Password: %s'), $plaintext_pass) . "rnrn";
        $message .= sprintf(__('If you have any problems, please contact me at %s.'), get_option('admin_email')) . "rnrn";
        $message .= __('Adios!');

        wp_mail($user_email, sprintf(__('[%s] Your username and password'), get_option('blogname')), $message);

    }
}

sur le thème functions.php (la ligne @wp_mail est commentée) et j’ai même essayé de commenter cette ligne dans wp-includes/pluggable.php mais je reçois toujours les courriels.

J'utilise WordPress 4.5.3 en ce moment. (MISE À JOUR À 4.6 dans le cadre de ce processus)

J'essaie d'être clair comme une canette. Je ne veux pas que le courrier électronique envoyé à l'utilisateur s'arrête comme il devrait le recevoir, mais comment puis-je faire en sorte que le courrier électronique s'arrête pour l'administrateur?

2
rudtek

Approche pluggable générique pour WordPress <4.6 (Voir la réponse de @ birgire pour> 4.6)

Les fonctions enfichables sont l’une des reliques les plus déprimantes du passé de WordPress et sont accompagnées d’une multitude de subtilités. Le fait de modifier directement le fichier principal (ce qui est totalement déconseillé, comme l'a mentionné @Jarmerson dans les commentaires) ne me permet pas de penser qu'un autre plug-in de votre installation pourrait écraser le plug-in.

Le fichier wp-includes/pluggable.php est chargé après les plugins actifs et mu-plugins, mais avant le thème actif; cela signifie que les "fonctions enfichables" ne peuvent être remplacées que par des déclarations dans un plugin.

La modification que vous avez découverte dans l’autre réponse s’applique à une version beaucoup plus ancienne de WordPress. Lors du remplacement de toute fonction connectable, vous devez commencer par la fonction d'origine telle qu'elle existe dans la version de votre installation (dans votre cas, la version 4.5.3). Ce faisant, la solution devient la suivante (commentaires omis; aucune ligne ajoutée, seulement supprimée):

function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
  if ( $deprecated !== null )
    _deprecated_argument( __FUNCTION__, '4.3.1' );

  if ( 'admin' === $notify || ( empty( $deprecated ) && empty( $notify ) ) ) 
    return;

  global $wpdb, $wp_hasher;
  $user     = get_userdata( $user_id );
  $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
  $key      = wp_generate_password( 20, false );

  do_action( 'retrieve_password_key', $user->user_login, $key );

  if ( empty( $wp_hasher ) ) {
    require_once ABSPATH . WPINC . '/class-phpass.php';
    $wp_hasher = new PasswordHash( 8, true );
  }

  $hashed = time() . ':' . $wp_hasher->HashPassword( $key );
  $wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );

  $message = sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n";
  $message .= __('To set your password, visit the following address:') . "\r\n\r\n";
  $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";
  $message .= wp_login_url() . "\r\n";

  wp_mail($user->user_email, sprintf(__('[%s] Your username and password info'), $blogname), $message);
}

J'ai omis la vérification traditionnelle if( !function_exists() ) qui encapsule généralement un remplacement plug-in car dans ce cas, une éventuelle erreur de déclaration en double est souhaitable - cela indiquerait qu'un autre plug-in a écrasé la fonction wp_new_user_notification() devant vous, et que votre tentative de le faire est en cours de traitement. complètement ignoré.

Je recommanderais de placer cette fonction dans un mu-plugin , car cela réduit les chances qu'un autre plug-in vous batte. Dans tous les cas de figure, ne modifiez pas le fichier principal wp-includes/pluggable.php avec ce qui précède.

5
bosco

Approche pour WordPress 4.6+

Découvrez le correctif dans ticket # 36009 qui a été intégré à WordPress version 4.6.

Il ajoute l'option 'user' pour le paramètre d'entrée $notify de wp_new_user_notification() , afin de ne pas envoyer ces courriels à l'administrateur.

Comment ça marche

La fonction register_new_user() contient cette partie:

do_action( 'register_new_user', $user_id );

Les notifications par email sont activées avec:

add_action( 'register_new_user', 'wp_send_new_user_notifications' );

où le rappel est défini comme:

function wp_send_new_user_notifications( $user_id, $notify = 'both' ) {
        wp_new_user_notification( $user_id, null, $notify );
}

Solution de contournement

On pourrait donc essayer cette approche (non testé) avec un rappel personnalisé et supprimez celui par défaut:

add_action( 'init', function()
{
    remove_action( 'register_new_user',   'wp_send_new_user_notifications'         );
    add_action(    'register_new_user',   'wpse236122_send_new_user_notifications' );
} );

function wpse236122_send_new_user_notifications(  $user_id, $notify = 'user' )
{   
    wp_send_new_user_notifications( $user_id, $notify );    
}

où nous changeons la valeur par défaut de 'both' à 'user'.

Il est à noter que wp_send_new_user_notifications() est également lié à ces actions:

  • network_site_new_created_user
  • network_site_users_created_user
  • network_user_new_created_user
  • edit_user_created_user

Nous pourrions les traiter de la manière décrite ci-dessus.

4
birgire

Après quelques recherches, j'ai déterminé que vous pouvez désactiver tous les courriels de notification, mais pas ceux qui envoient à l'administrateur.

Selon votre question initiale, je peux vous donner quelques conseils sur la façon de gérer les courriers électroniques de notification non désirés à partir de l'enregistrement d'utilisateur WordPress et le courrier électronique de réinitialisation du mot de passe.

En supposant que votre environnement cPanel exécute votre installation, suivez simplement ces étapes et vous aurez effectivement supprimé ces courriels particuliers.

Accès Filtrage au niveau du compte à partir de l’administrateur cPanel. Dans cette zone, vous pouvez gérer les filtres de votre compte principal. Vous voulez Créer un filtre et créer un Nouveau filtre pour Tous les courriers de votre compte .

Dans le champ Rule , sélectionnez To et est égal à . Remarque: vous pouvez également créer des filtres pour d’autres conditions . Le dernier champ est une zone de texte dans laquelle vous entrez l'adresse électronique avec laquelle vous travaillez. Sous la zone rules , la magie opère. Sélectionnez Supprimer le message . Il y a aussi d'autres options.

J'ai toujours créé une adresse électronique qui ne sera pas utilisée et j'ai créé le filtre en l'utilisant.

Je pourrais parler des crochets enfichables dans WordPress, etc., mais rien ne fera exactement ce que vous voudriez. Bummer ...

2
Jarmerson