Home>Guide>Come disabilitare il cambio email nel profilo utente in WordPress

Come disabilitare il cambio email nel profilo utente in WordPress



In precedenza, nella guida Disabilitare il cambio password in WordPress, abbiamo visto come disabilitare il cambio password da parte degli utenti WordPress.
Ogni account utente WordPress, indipendentemente dal ruolo, necessita di un indirizzo email associato, usato da WordPress sia come nome utente alternativo, sia come email di recupero password. Questo indirizzo email è modificabile nel backend di WordPress (WP-ADMIN) nella pagina di modifica profilo utente.
Ma come puoi fare se desideri disabilitare queste opzioni e far sì che l’indirizzo email non sia modificabile?

  • Leggi l'articolo, ti bastano solo 1 minuto, 22 secondi
    Sei di fretta? Scarica il PDF e consultalo quando vuoi!

Perché disabilitare il cambio indirizzo email su WordPress?

Potrebbero essere molti i motivi per cui desideri impedire il cambio dell’indirizzo email nei profili account WordPress. Ad esempio, se la tua installazione di WordPress è collegata tramite API ad un CRM esterno, che a sua volta non consente la variazione dell’indirizzo email utente, oppure perché consideri l’indirizzo email un dato univoco ed identificativo e così via.
Indipendentemente dal motivo, vediamo adesso come inpedire la modifica del campo indirizzo email nel backend di WordPress, nalla pagina di modifica profilo utente.


Rendere in campo indirizzo email non editabile

Il primo step, consiste nel rendere appunto il campo dell’indirizzo email non editable. In generale questo è molto semplice, è sufficiente aggiungere ad esempio un attributo “disabled” al campo input del form per disabilitarne l’invio del valore al submit del form.
Tuttavia, in WordPress questa specifica operazione non ha un hook dedicato che consenta di farlo così facilmente. Allo stesso modo, sai benissimo che non bisogna mai modificare il Core di WordPress.
Come risolviamo quindi il problema?

Semplice, utilizzeremo un workaround in Javascript!

WordPress dispone di un hook che intercetta la pagina di modifica profilo utente nel backend, consentendo di aggiungere il proprio codice personalizzato. Eccone la definizione:

do_action( 'show_user_profile', WP_User $profile_user )

L’idea è di sfruttare questo hook per aggiungere uno snippet di Javascript che disabiliti il campo indirizzo email nella pagina di modifica del profilo utente nel backend di WordPress.

Come fare? Semplice, è sufficiente modificare il file functions.php del tuo tema, che trovi in:

wp-content/themes/{nome_del_tema}/

che trovi nello spazio FTP del tuo sito ed inserire il codice:

add_action( 'show_user_profile', 'disable_profile_email_edit' );
add_action( 'edit_user_profile', 'disable_profile_email_edit' );
function disable_profile_email_edit() {
    if ( ! current_user_can( 'manage_options' ) ) { 
        printf( '<script>document.getElementById( "email" ).setAttribute( "disabled", "disabled" );</script>' );
    }
} );

In particolare, avrai notato la condizione:

if ( ! current_user_can( 'manage_options' ) ) {}

che occorre per evitare la modifica del campo solo per gli utenti con ruolo diverso da ADMINISTRATOR.
In questo modo, l’amministratore del sito avrà comunque il pieno controllo e la possibilità di modificare il campo indirizzo email dei profili utente, ma nulla ti vieta di applicare una restrizione maggiore, rimuovendo questa condizione.


Evitare la modifica dell'indirizzo email

Il secondo step, consiste nell’evitare la modifica del valore dell’indirizzo email tramite PHP. In questo modo, andiamo ad irrobustire il nostro scopo, per prevenire qualsiasi tipo di problema.

Ma in che modo?

Utilizzeremo un altro hook messo a disposizione da WordPress, che viene invocato quando si clicca sul pulsante “Aggiorna utente” nella pagina profilo utente del backend di WordPress, immediatamente prima che i dati vengano memorizzati nel database. Eccone la definizione:

do_action( 'personal_options_update', int $user_id );

L’idea stavolta è di “forzare” il valore del campo indirizzo email. In questo modo, qualsiasi dato possa essere inviato attraverso il form, verrà sovrascritto con il precedente valore, annullando di fatto la modifica!

Come fare? Semplice, è sufficiente modificare il file functions.php del tuo tema, che trovi in:

wp-content/themes/{nome_del_tema}/

che trovi nello spazio FTP del tuo sito ed inserire il codice:

add_action( 'personal_options_update', function( $user_id ) {
    if ( ! current_user_can( 'manage_options' ) ) { 
        $user = get_user_by( 'id', $user_id );
        $_POST['email'] = $user->user_email; 
    }
}, 5 );

Con questo snippet, il valore del campo indirizzo email, contenuto nella variabile $_POST[‘email’] verrà appunto sovrascritto con il valore già memorizzato nel database, prelevato attraverso la funzione get_user_by() di WordPress.

Anche in questo caso, avrai notato la presenza della condizione:

if ( ! current_user_can( 'manage_options' ) ) {}

che bypassa il blocco per gli utenti administrator, consentendo la modifica.


Conclusione

Ecco il risultato finale:

Da questo momento, il campo dell’indirizzo email presente nella pagina profilo utente del backend di WordPress è modificabile solamente dagli account con privilegi di amministratori, mentre a tutti gli altri ruoli utente sarà preclusa la possibilità di modificare l’indirizzo email.



Ti è piaciuto questo articolo? Regalami un click per ripagarmi dello sforzo



Code4Life ti è stato utile? Sostienici con una donazione!

Dona con PayPal

Hai trovato interessante l’articolo? Allora ti consiglio di leggere:

Come creare un negozio B2B con WooCommerce


È possibile creare un ecommerce B2B di successo con WooCommerce? Scopri come.

Come fare una richiesta HTTP in JavaScript


Impariamo ad effettuare chiamate HTTP in JavaScript, da utilizzare ad esempio per far comunicare il tuo sito web con API fornite da servizi esterni.

Oppure cerca tra gli articoli correlati


Qualche dubbio? Ecco le opinioni degli altri utenti

Grazie. Ottimo lavoro!!

E tu cosa ne pensi? Condividi la tua opinione e discutiamone insieme
La tua email non sarà resa pubblico o utilizzata per inviarti spam, te lo prometto

Iscrivimi alla newsletter per ricevere news ed aggiornamenti
Utilizziamo piattaforme di terze parti per l’invio di newsletter. (Informativa sulla privacy)
Tienimi aggiornato su questo articolo
Ricevi una email di notifica quando qualcuno scriverà un commento a questo articolo. (Informativa sulla privacy)
Ricorda i miei dati per la prossima volta che scriverò un commento
Il tuo nome e la tua email verranno salvati in un cookie in questo browser. (Informativa sulla privacy)