Cum să dezactivezi câmpul de email în detaliile contului client WooCommerce
Există vreo posibilitate de a dezactiva câmpul de email în detaliile contului client WooCommerce? Sau există vreun hook sau acțiune disponibilă pentru a face asta? Folosesc un theme pre-făcut și nu sunt prea experimentat în PHP. Am încercat acest plugin numit "Prevent Email Change" de la Happy Plugins, dar nu a funcționat.
Aș aprecia orice ajutor în legătură cu asta.
Mulțumesc,

Puteți face acest lucru adăugând următorul cod în 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 );
Dar aceasta nu este o abordare corectă, deoarece WooCommerce folosește email-ul pentru a notifica utilizatorul despre starea comenzii.

Bună, mulțumesc pentru asta. Da, știam deja acest lucru. Dar ceea ce doream este ca ei să își poată înregistra adresa de email în timpul finalizării comenzii, iar odată ce contul lor a fost creat complet, să nu mai poată schimba adresa de email pe pagina Detalii Cont. Este posibil acest lucru?

WordPress nu are un filtru sau un hook pentru a preveni schimbarea adresei de email. Happy Plugin doar dezactivează câmpul de email pe pagina de administrare, așa că nu poate preveni acțiunile de pe pagina Detalii Cont în WooCommerce. Dar care este motivul pentru interzicere? Utilizatorii sunt identificați prin ID-uri.

Am un motiv valid pentru asta. Dezvolt un site de eLearning cu acces restricționat. Doar utilizatorii din domenii permise se pot înscrie. Validarea adresei de email se face la înregistrare, dar utilizatorii pot încă să își schimbe adresa de email prin această pagină, ceea ce nu ar trebui să se întâmple.

Asta este ceea ce folosesc. Am avut și probleme cu email-uri greșite pe conturile înregistrate. Așa că am dezactivat pur și simplu câmpul și l-am setat la 'required' => false
dacă utilizatorul este autentificat.
if ( is_user_logged_in() ) {
$fields['billing']['billing_email'] = [
'label' => 'Adresă de email',
'required' => false,
'custom_attributes' => [
'disabled' => 'disabled',
]
];
} else {
$fields['billing']['billing_email'] = [
'label' => 'Adresă de email',
'required' => true,
];
}
Sper că acest lucru ajută pe cineva!

Salut Manuel, bine ai venit pe wordpress.stackexchange. Deși răspunsul tău este tehnic corect, trebuie să îl votez negativ pentru că editarea unui plugin în acest fel nu este recomandată. Ce s-ar întâmpla dacă pluginul ar fi actualizat și modificările ar fi șterse? Este mai bine să folosești un hook sau o funcție de filtrare pentru a atinge scopul inițial. Mulțumesc că te-ai alăturat, sper că acesta este primul din multe răspunsuri utile pe care le vei oferi :)

L-am votat pozitiv, pentru că este o modalitate creativă de a rezolva o problemă. Nu neapărat cea corectă, dar ai găsit-o și poate fi singura soluție pentru unii. Nu este corect sau drept să descurajezi soluția, deoarece s-ar fi putut folosi un child theme sau orice altă metodă de suprascriere protejată de actualizările pluginului. Modul mai bun este să schimbi câmpul [required] la 0. Folosind add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); valori: [billing_email] => Array ( [label] => Adresă de email [required] => 1
