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.
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
}
}
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 .
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.
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
.
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');
}
}