Disabilitare il campo email nei dettagli account cliente WooCommerce
Esiste un modo per disabilitare il campo email nei dettagli dell'account cliente WooCommerce? O c'è qualche hook o azione disponibile per fare questa modifica? Sto utilizzando un tema predefinito e non sono molto esperto di PHP. Ho provato il plugin "Prevent Email Change" di Happy Plugins, ma non ha funzionato.
Apprezzerei molto qualsiasi aiuto in merito.
Grazie,

Puoi farlo aggiungendo questo codice al file functions.php
:
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_email']);
return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields', 1000, 1 );
Ma questo è un approccio errato, poiché WooCommerce utilizza l'email per notificare all'utente lo stato dell'ordine.

Ciao, grazie per questo. Sì, lo sapevo. Ma quello che volevo è che possano registrare la loro email al momento del checkout e poi, una volta che il loro account è stato completamente creato, non possano più modificare la loro email nella pagina dei Dettagli Account. Sarebbe possibile?

WordPress non ha un filtro o un hook per impedire la modifica dell'email. Happy Plugin semplicemente disabilita il campo email nella pagina di amministrazione, quindi non può impedire azioni nella pagina dei Dettagli Account in WooCommerce. Ma qual è il motivo per vietarlo? Gli utenti sono identificati dagli ID.

Ho una valida ragione per questo. Sto creando un sito eLearn con accesso ristretto. Solo gli utenti di domini autorizzati possono iscriversi. La validazione dell'email avviene al momento della registrazione, ma gli utenti possono ancora modificare la loro email tramite questa pagina, cosa che non dovrebbe accadere.

Questo è quello che utilizzo. Stavo anche risolvendo il problema degli indirizzi email errati sugli account registrati. Quindi ho semplicemente disabilitato il campo e impostato 'required' => false
se l'utente è loggato.
if ( is_user_logged_in() ) {
$fields['billing']['billing_email'] = [
'label' => 'Indirizzo Email',
'required' => false,
'custom_attributes' => [
'disabled' => 'disabled',
]
];
} else {
$fields['billing']['billing_email'] = [
'label' => 'Indirizzo Email',
'required' => true,
];
}
Spero che questo possa aiutare qualcuno là fuori!

Ciao Manuel, benvenuto su wordpress.stackexchange. Anche se la tua risposta è tecnicamente corretta, devo votarla negativamente perché modificare un plugin in quel modo non è raccomandato. Cosa succederebbe se il plugin venisse aggiornato e le modifiche cancellate? È meglio usare un hook o una funzione filter per raggiungere l'obiettivo dell'OP. Grazie per aver partecipato, spero che questa sia la prima di tante risposte utili che fornirai :)

L'ho votata positivamente perché è un modo creativo per risolvere un problema. Non necessariamente il modo giusto, ma l'hai trovato e potrebbe essere l'unica soluzione per alcuni. Non è corretto o giusto scoraggiare la soluzione, dato che si sarebbe potuto usare un child theme o qualsiasi altro numero di override protetti dagli aggiornamenti del plugin. Il modo migliore è cambiare il campo [required] a 0. Usando add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); valori: [billing_email] => Array ( [label] => Indirizzo email [required] => 1
