Disattiva le email di amministratore per nuove registrazioni utente
Come posso disattivare le notifiche email all'utente e all'amministratore quando viene registrato un nuovo utente?
Ho visto alcuni suggerimenti e plugin ma nessuno sembra funzionare. Uno era quello di prendere la funzione da uno dei plugin:
if ( !function_exists('wp_new_user_notification') ) :
/**
* Notifica l'amministratore del blog di un nuovo utente, normalmente via email.
*
* @since 2.0
*
* @param int $user_id ID utente
* @param string $plaintext_pass Opzionale. La password in testo semplice dell'utente
*/
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);
// L'opzione blogname viene convertita con esc_html quando viene salvata nel database in sanitize_option
// vogliamo ripristinarlo per il testo semplice delle email.
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
$message = sprintf(__('Nuova registrazione utente sul tuo sito %s:'), $blogname) . "\r\n\r\n";
$message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
$message .= sprintf(__('Email: %s'), $user_email) . "\r\n";
@wp_mail(get_option('admin_email'), sprintf(__('[%s] Nuova registrazione utente'), $blogname), $message);
if ( empty($plaintext_pass) )
return;
$message = sprintf(__('Username: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n";
$message .= wp_login_url() . "\r\n";
// wp_mail($user_email, sprintf(__('[%s] Il tuo username e password'), $blogname), $message)
}
endif;
Le domande e i suggerimenti erano piuttosto vecchi quindi forse WP 3.5 sovrascrive qualcosa.
Alla registrazione continuo a ricevere l'email all'amministratore e un'email all'utente.
Non voglio però bloccare l'email per il recupero password.
La funzione wp_new_user_notification
è "pluggable". Ciò significa che puoi sovrascriverla dichiarando la tua versione di questa funzione nel tuo plugin/tema.
Quindi, se desideri disabilitare completamente tutte le notifiche, fallo in questo modo:
if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
return;
}
endif;
Tuttavia non ti consiglio di disabilitare tutte le notifiche, e ti suggerirei almeno di inviare una notifica all'utente (Come potrebbe altrimenti scoprire la sua password?). In questo caso il tuo codice dovrebbe essere il seguente:
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(__('Username: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n";
$message .= wp_login_url() . "\r\n";
wp_mail($user_email, sprintf(__('[%s] Your username and password'), $blogname), $message);
}
endif;

+1 @Rob ... come fa un utente a ottenere una password se disabiliti la notifica? Questo è un ottimo punto sollevato da Eugene Manuilov.

@s_ha_dum Ho una registrazione frontend che utilizza Gravity Forms, quindi l'email viene inviata separatamente. Ma questo bloccherà l'email per il recupero password?

@EugeneManuilov Ho appena provato il primo box di codice ma continuo a ricevere le email.

Secondo questa pagina sarebbe sufficiente utilizzare questo codice (per disabilitare completamente tutte le notifiche):
if ( !function_exists('wp_new_user_notification') ) {
function wp_new_user_notification( ) {}
}
È abbastanza simile alla risposta data, ma un po' più breve. Ho pensato di condividerlo per quello che vale.

A partire dalla versione 4.6 è disponibile un parametro per disabilitare le notifiche di amministrazione. https://developer.wordpress.org/reference/functions/wp_new_user_notification/
- @since 4.6.0 Il parametro
$notify
accetta 'user' per inviare la notifica solo all'utente creato. - @param string $notify Opzionale. Tipo di notifica che dovrebbe essere inviata. Accetta 'admin' o una stringa vuota (solo admin), 'user', o 'both' (admin e utente). Valore predefinito stringa vuota. */
- function wp_new_user_notification( $user_id, $deprecated = null, $notify = 'user' )

Ho dovuto farlo oggi e ho notato che molte delle soluzioni disponibili sembrano piuttosto obsolete. Questo sembra essere un modo migliore senza dover sovrascrivere le funzioni "pluggable". Non è il mio codice esatto ma dovrebbe essere un buon riferimento.
add_action( 'register_post', 'maybe_stop_notifications', 10, 3 );
/**
* Intercetta la registrazione utente e possibilmente disabilita le notifiche
*
* @param string $sanitized_user_login Nome utente sanitizzato
* @param string $user_email Email dell'utente
* @param WP_Error $errors Oggetto errori WP
*/
function maybe_stop_notifications ( $sanitized_user_login, $user_email, $errors ) {
// Se non ci sono errori nella registrazione
if( empty( $errors->get_error_code() )) {
// Rimuove l'azione che invia le notifiche email per il nuovo utente
remove_action( 'register_new_user', 'wp_send_new_user_notifications' );
}
}
