Disabilitare l'email di registrazione con password in WordPress
Come sappiamo, WordPress 4.3 ha introdotto un nuovo sistema per le password. Purtroppo, questo nuovo sistema ha eliminato la possibilità di NON inviare automaticamente un'email ai nuovi utenti.
Il mio cliente utilizzava un sistema in cui inviava un'email personalizzata ai clienti, registrando manualmente le loro email e poi inviando loro le credenziali di accesso con un messaggio personalizzato. Sappiamo che questo nuovo sistema cerca di essere più sicuro, ma non funziona per il livello di controllo che il cliente desidera.
Nella mia ricerca di una soluzione per disattivare queste email, ho trovato il seguente codice, ma credo che disattivi solo le email di notifica quando viene CAMBIATA l'email per utenti già registrati, non quando l'account viene creato:
add_filter( 'send_password_change_email', '__return_false');
add_filter( 'send_email_change_email', '__return_false');
Qualcuno conosce un modo per disattivare queste email iniziali con la password che vengono inviate dopo la registrazione?
Grazie.

Puoi intercettare questa email prima che venga inviata utilizzando l'hook phpmailer_init
.
Per impostazione predefinita, questo hook viene attivato prima che qualsiasi email venga inviata. Nella funzione seguente, $phpmailer
sarà un'istanza di PHPMailer, e puoi utilizzare i suoi metodi per rimuovere il destinatario predefinito e manipolare l'email prima che venga inviata.
add_action('phpmailer_init', 'wse199274_intercept_registration_email');
function wse199274_intercept_registration_email($phpmailer){
$admin_email = get_option( 'admin_email' );
# Intercetta l'email con username e password controllando l'oggetto
if( strpos($phpmailer->Subject, 'Your username and password info') ){
# cancella la lista dei destinatari
$phpmailer->ClearAllRecipients();
# opzionalmente, invia l'email all'indirizzo email dell'amministratore WordPress
$phpmailer->AddAddress($admin_email);
}else{
# non intercettato
}
}

In realtà dipende da come crei il nuovo utente. Se lo fai dalla sezione di amministrazione - Utenti - Aggiungi nuovo hai ragione. Nella versione 4.3 purtroppo non puoi disabilitare l'invio dell'email di notifica. Ma se vuoi veramente creare un nuovo utente senza l'email, c'è un modo.
Puoi creare un piccolo plugin dove creerai un nuovo account manualmente tramite la funzione wp_insert_user
, che per impostazione predefinita non invia alcuna email.
Questa funzione può essere chiamata così.
wp_insert_user( $userdata );
Dove il parametro userdata
è un array in cui puoi passare tutte le informazioni necessarie.
$userdata = array(
'user_login' => 'login',
'user_pass' => 'password',
);
$user_id = wp_insert_user( $userdata ) ;
//In caso di successo
if ( ! is_wp_error( $user_id ) ) {
echo "Utente creato: ". $user_id;
}
Per maggiori informazioni controlla il codex qui.

La funzione wp_new_user_notification
è "pluggable", quindi puoi sovrascriverla definendone una tua. Dovresti essere in grado di copiare l'intera funzione da wp-includes/pluggable.php
nel tuo plugin (o nel functions.php
) e rimuovere la riga che invia l'email.

Non puoi sovrascrivere wp_new_user_notification nel functions.php del tema, perché le funzioni pluggable vengono caricate prima del tema. Deve essere sovrascritta in un plugin o mu-plugin. Per saperne di più: http://wordpress.stackexchange.com/a/55966/56759

Per risolvere questo problema nel tuo tema, crea un nuovo mu-plugin generando un file wp_new_user_notifications.php
(il nome è a tua discrezione) e inseriscilo nella cartella wp-content/mu-plugins
. Se questa cartella non esiste, creala. Ricorda di posizionare il file php direttamente nella cartella principale, non in alcuna sottocartella.
Quindi procedi come suggerito da Simon - copia il metodo wp_new_user_notifications.php
da wp-includes/pluggable.php
nel tuo nuovo file wp_new_user_notifications.php
e modificalo secondo necessità.
Per rispondere alla tua domanda: per disattivare le email iniziali con la password è sufficiente rimuovere l'ultima chiamata al metodo wp_mail
.

add_filter('send_password_change_email', '__return_false');
Funziona. Ma è essenziale che venga aggiunto al plugin stesso e non al functions.php del tema.
Ad esempio:
class ... {
public function __construct() {
...
$this->init_hooks();
}
public function init_hooks() {
add_filter('send_password_change_email', '__return_false');
}
}
