Desactivar correos de administrador para nuevos registros de usuarios
¿Cómo puedo desactivar las notificaciones por correo electrónico para el usuario y el administrador cuando se registra un nuevo usuario?
He visto algunas sugerencias y plugins pero ninguno parece funcionar. Una de ellas era tomar la función de uno de los plugins:
if ( !function_exists('wp_new_user_notification') ) :
/**
* Notifica al administrador del blog sobre un nuevo usuario, normalmente por correo electrónico.
*
* @since 2.0
*
* @param int $user_id ID del usuario
* @param string $plaintext_pass Opcional. La contraseña en texto plano del usuario
*/
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);
// La opción blogname se escapa con esc_html al guardar en la base de datos en sanitize_option
// queremos revertir esto para el texto plano de los correos.
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
$message = sprintf(__('Nuevo registro de usuario en tu sitio %s:'), $blogname) . "\r\n\r\n";
$message .= sprintf(__('Nombre de usuario: %s'), $user_login) . "\r\n\r\n";
$message .= sprintf(__('Correo electrónico: %s'), $user_email) . "\r\n";
@wp_mail(get_option('admin_email'), sprintf(__('[%s] Nuevo registro de usuario'), $blogname), $message);
if ( empty($plaintext_pass) )
return;
$message = sprintf(__('Nombre de usuario: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Contraseña: %s'), $plaintext_pass) . "\r\n";
$message .= wp_login_url() . "\r\n";
// wp_mail($user_email, sprintf(__('[%s] Tu nombre de usuario y contraseña'), $blogname), $message)
}
endif;
Las preguntas y sugerencias eran bastante antiguas, así que quizás WordPress 3.5 anula algo.
Al registrarse, sigo recibiendo el correo del administrador y un correo al usuario.
No quiero bloquear el correo de contraseña olvidada.

La función wp_new_user_notification
es "pluggable". Esto significa que puedes sobrescribirla declarando tu propia versión de esta función en tu plugin/tema.
Por lo tanto, si deseas desactivar todas las notificaciones completamente, hazlo así:
if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
return;
}
endif;
Sin embargo, no te recomendaría desactivar todas las notificaciones, y te aconsejaría que al menos envíes una notificación al usuario (¿Cómo sabría un usuario su contraseña?). Así que en este caso tu código debería ser el siguiente:
if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
$user = get_userdata( $user_id );
$user_login = stripslashes($user->user_login);
$user_email = stripslashes($user->user_email);
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
if ( empty($plaintext_pass) ) {
return;
}
$message = sprintf(__('Nombre de usuario: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Contraseña: %s'), $plaintext_pass) . "\r\n";
$message .= wp_login_url() . "\r\n";
wp_mail($user_email, sprintf(__('[%s] Tu nombre de usuario y contraseña'), $blogname), $message);
}
endif;

+1 @Rob ... ¿cómo obtiene un usuario una contraseña si desactivas la notificación? Este es un muy buen punto que menciona Eugene Manuilov.

@s_ha_dum Tengo un formulario de registro en el frontend usando Gravity Forms, así que eso envía un correo por separado. ¿Esto bloqueará el correo de contraseña olvidada?

@EugeneManuilov Acabo de probar el primer cuadro de código pero sigo recibiendo los correos.

Según esta página sería suficiente usar este código (para desactivar todas las notificaciones completamente):
if ( !function_exists('wp_new_user_notification') ) {
function wp_new_user_notification( ) {}
}
Es bastante similar a la respuesta dada, pero un poco más corto. Pensé en compartirlo por si puede ser útil.

A partir de la versión 4.6 existe un parámetro para desactivar las notificaciones de administración. https://developer.wordpress.org/reference/functions/wp_new_user_notification/
- @since 4.6.0 El parámetro
$notify
acepta 'user' para enviar notificación solo al usuario creado. - @param string $notify Opcional. Tipo de notificación que debe ocurrir. Acepta 'admin' o una cadena vacía (solo admin), 'user', o 'both' (admin y usuario). Por defecto vacío. */
- function wp_new_user_notification( $user_id, $deprecated = null, $notify = 'user' )

Tuve que hacer esto hoy, y encontré que muchas de estas soluciones parecen bastante desactualizadas. Esta parece ser una mejor manera sin sobrescribir funciones enchufables. Este no es mi código exacto pero debería ser una buena referencia.
add_action( 'register_post', 'maybe_stop_notifications', 10, 3 );
function maybe_stop_notifications ( $sanitized_user_login, $user_email, $errors ) {
if( empty( $errors->get_error_code() )) {
remove_action( 'register_new_user', 'wp_send_new_user_notifications' );
}
}
