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!
Sommario
1 Perché disabilitare il cambio indirizzo email su WordPress? |
2 Rendere in campo indirizzo email non editabile |
3 Evitare la modifica dell'indirizzo email |
4 Conclusione |
5 Commenti |
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.
Grazie. Ottimo lavoro!!