Desactivar el correo electrónico de registro de contraseña de usuario
Como todos sabemos, WordPress 4.3 introdujo un nuevo sistema de contraseñas. Desafortunadamente, este nuevo sistema eliminó la posibilidad de NO enviar un correo electrónico a los nuevos usuarios.
Mi cliente estaba usando un sistema donde enviaba un correo personalizado a sus clientes, registrando sus correos manualmente y luego enviándoles un mensaje con la información de inicio de sesión y un mensaje personalizado. Sabemos que este nuevo sistema intenta ser más seguro, pero no funciona para el nivel de control que él desea.
En mi búsqueda de una solución para desactivar estos correos, encontré el siguiente código, pero creo que solo desactiva las notificaciones cuando un usuario cambia su correo electrónico para usuarios ya registrados, no cuando se crea por primera vez:
// Desactiva los correos de cambio de contraseña y cambio de email
add_filter( 'send_password_change_email', '__return_false');
add_filter( 'send_email_change_email', '__return_false');
¿Alguien sabe cómo desactivar estos correos iniciales de contraseña que se envían después del registro?
Gracias.
Puedes interceptar este correo electrónico antes de que sea enviado utilizando el hook phpmailer_init
.
Por defecto, este hook se activa antes de que cualquier correo sea enviado. En la función de abajo, $phpmailer
será una instancia de PHPMailer, y puedes usar sus métodos para eliminar el destinatario por defecto y manipular el correo antes de que sea enviado.
add_action('phpmailer_init', 'wse199274_intercept_registration_email');
function wse199274_intercept_registration_email($phpmailer){
$admin_email = get_option( 'admin_email' );
# Interceptar correo de usuario y contraseña verificando la línea de asunto
if( strpos($phpmailer->Subject, 'Your username and password info') ){
# limpiar la lista de destinatarios
$phpmailer->ClearAllRecipients();
# opcionalmente, enviar el correo al email del administrador de WordPress
$phpmailer->AddAddress($admin_email);
}else{
# no interceptado
}
}

Realmente depende de cómo crees el nuevo usuario. Si lo haces desde la administración - Usuarios - Añadir nuevo, tienes razón. En la versión 4.3 desafortunadamente no puedes desactivar el envío del correo de notificación. Pero si realmente quieres crear un nuevo usuario sin el correo, hay una manera.
Puedes crear un pequeño plugin donde crearías una nueva cuenta manualmente usando la función wp_insert_user
, que por defecto no envía ningún correo electrónico.
Esta función se puede llamar así:
wp_insert_user( $userdata );
Donde el parámetro userdata
es un array donde puedes pasar toda la información necesaria.
$userdata = array(
'user_login' => 'login',
'user_pass' => 'password',
);
$user_id = wp_insert_user( $userdata ) ;
// En caso de éxito
if ( ! is_wp_error( $user_id ) ) {
echo "Usuario creado: ". $user_id;
}
Para más información consulta el codex aquí.

La función wp_new_user_notification
es enchufable (pluggable), por lo que puedes sobrescribirla definiendo tu propia versión. Deberías poder copiar toda la función desde wp-includes/pluggable.php
a tu plugin (o al archivo functions.php
) y eliminar la línea que envía el correo electrónico.

No puedes sobreescribir wp_new_user_notification en el functions.php del tema, porque las funciones pluggables se cargan antes que el tema. Debe sobreescribirse en un plugin o mu-plugin. Lee más: http://wordpress.stackexchange.com/a/55966/56759

Para resolver esto en tu tema, crea un nuevo mu-plugin generando un archivo wp_new_user_notifications.php
(el nombre es a tu elección) y colócalo en la carpeta wp-content/mu-plugins
. Si no existe dicha carpeta, créala. Recuerda colocar el archivo php directamente en la carpeta, no en ningún subdirectorio.
Luego continúa como Simon sugirió - copia el método wp_new_user_notifications.php
desde wp-includes/pluggable.php
a tu nuevo archivo wp_new_user_notifications.php
y modifícalo según sea necesario.
Para responder a tu pregunta: para desactivar los correos electrónicos con contraseña inicial es suficiente con eliminar la última llamada al método wp_mail
.

add_filter('send_password_change_email', '__return_false');
Funciona. Pero es esencial que se agregue al propio plugin y no al functions.php del tema.
Como:
class ... {
public function __construct() {
...
$this->init_hooks();
}
public function init_hooks() {
add_filter('send_password_change_email', '__return_false');
}
}
