web-dev-qa-db-fra.com

Désactiver le courrier électronique du mot de passe d'enregistrement d'utilisateur

Donc, WordPress 4.3 a un nouveau système de mot de passe, comme nous le savons tous. Malheureusement, ce nouveau système a supprimé la possibilité d'envoyer un courrier électronique aux nouveaux utilisateursNOT.

Mon client utilisait un système dans lequel il envoyait un courrier électronique personnalisé à ses clients, enregistrant manuellement leurs courriers électroniques, puis leur envoyant un courrier électronique avec les informations de connexion avec un message personnalisé. Nous sommes conscients que ce nouveau système tente d'être plus sécurisé, mais cela ne fonctionne pas pour le degré de contrôle qu'il souhaiterait.

J'ai trouvé le code suivant dans ma recherche d'une solution pour désactiver ces courriels, mais je pense qu'ils ne désactivent les courriels de notification que si le courrier électronique d'un utilisateur est MODIFIE pour les utilisateurs déjà enregistrés, et non lors de sa création:

add_filter( 'send_password_change_email', '__return_false');
add_filter( 'send_email_change_email', '__return_false');

Est-ce que quelqu'un connaît un moyen de désactiver ces courriels de mot de passe initial envoyés après l'enregistrement?

Je vous remercie.

12
Lisa Cerilli

Vous pouvez intercepter cet e-mail avant de l'envoyer à l'aide de phpmailer_init hook.

Par défaut, ce hook se déclenche avant l'envoi de tout courrier électronique. Dans la fonction ci-dessous, $phpmailer sera une instance de PHPMailer , et vous pourrez utiliser ses méthodes pour supprimer le destinataire par défaut et manipuler le courrier électronique avant son envoi.

add_action('phpmailer_init', 'wse199274_intercept_registration_email');
function wse199274_intercept_registration_email($phpmailer){
    $admin_email = get_option( 'admin_email' );

    # Intercept username and password email by checking subject line
    if( strpos($phpmailer->Subject, 'Your username and password info') ){
        # clear the recipient list
        $phpmailer->ClearAllRecipients();
        # optionally, send the email to the WordPress admin email
        $phpmailer->AddAddress($admin_email);
    }else{
        #not intercepted
    }
}
8
sxalexander

En fait, cela dépend de la manière dont vous créez le nouvel utilisateur. Si vous le faites depuis l’administration - Utilisateurs - Ajouter nouveau, vous avez raison. Malheureusement, en 4.3, vous ne pouvez pas désactiver l'envoi du courrier électronique de notification. Mais si vous voulez vraiment créer un nouvel utilisateur sans le courrier électronique, vous pouvez le faire.

Vous pouvez créer un petit plugin dans lequel vous créeriez vous-même un nouveau compte via la fonction wp_insert_user, qui n'envoie aucun email par défaut.

Cette fonction peut s'appeler comme ça.

wp_insert_user( $userdata );

Où le paramètre userdata est un tableau où vous pouvez transmettre toutes les informations nécessaires.

$userdata = array(
    'user_login'  =>  'login',
    'user_pass'   =>  'password',
);

$user_id = wp_insert_user( $userdata ) ;

//On success
if ( ! is_wp_error( $user_id ) ) {
    echo "User created : ". $user_id;
}

Pour plus d'informations, consultez codex ici .

3
Emetrop

La fonction wp_new_user_notification est connectable, vous pouvez donc la remplacer en définissant la vôtre. Vous devriez pouvoir copier toute la fonction de wp-includes/pluggable.php dans votre plugin (ou functions.php) et supprimer la ligne qui envoie le courrier électronique.

3
Simon Blackbourn

Pour résoudre cela dans votre thème, créez nouveau mu-plugin en créant un nouveau fichier wp_new_user_notifications.php (le nom vous appartient) et placez-le dans le dossier wp-content/mu-plugins. S'il n'y a pas de dossier comme ça, créez-en un. N'oubliez pas de placer le fichier php directement dans le dossier, pas dans un sous-dossier.

Continuez comme suggéra Simon - copiez la méthode wp_new_user_notifications.php de wp-includes/pluggable.php dans votre tout nouveau fichier wp_new_user_notifications.php et modifiez-la au besoin.

Pour répondre à votre question: pour désactiver les e-mails de mot de passe initial, il suffit de supprimer le dernier appel à la méthode wp_mail.

1
fandasson
add_filter('send_password_change_email', '__return_false');

Travaux. Mais il est essentiel que cela soit ajouté au plugin lui-même et non au functions.php pour le thème.

Comme.

class ... {
  public function __construct() {
    ...
    $this->init_hooks();
  }

  public function init_hooks() {
    add_filter('send_password_change_email', '__return_false');
  }
}
0
Philip