Deshabilitar el campo de correo electrónico en los detalles de la cuenta de cliente de WooCommerce
¿Existe alguna posibilidad de deshabilitar el campo de correo electrónico en los detalles de la cuenta de cliente de WooCommerce? ¿O hay algún hook o acción disponible para hacer esto? Estoy usando un tema prefabricado y no tengo mucha experiencia con PHP. He probado un plugin llamado "Prevent Email Change" de Happy Plugins, pero no funcionó.
Agradecería cualquier ayuda al respecto.
Gracias,

Puedes hacerlo añadiendo este código al archivo 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 );
Pero este es un enfoque incorrecto, ya que WooCommerce utiliza el correo electrónico para notificar al usuario sobre el estado del pedido.

Hola, gracias por esto. Sí, lo sabía. Pero lo que quería es que puedan registrar su correo electrónico al finalizar la compra y luego, una vez que su cuenta se haya creado por completo, no puedan cambiar su correo electrónico en la página de Detalles de la Cuenta. ¿Sería posible eso?

WordPress no tiene un filtro o hook para evitar el cambio de correo electrónico. Happy Plugin solo deshabilita el campo de correo electrónico en la página de administración, por lo que no puede evitar acciones en la página de Detalles de la Cuenta en WooCommerce. Pero, ¿cuál es la razón para prohibirlo? Los usuarios se identifican por IDs.

Tengo una razón válida para esto. Estoy creando un sitio de eLearn con acceso restringido. Solo pueden unirse usuarios de dominios en la lista blanca. La validación del correo electrónico se realiza durante el registro, pero los usuarios aún pueden cambiar su correo electrónico a través de esta página, lo cual no debería suceder.

Esto es lo que utilizo. También estaba solucionando problemas con correos electrónicos incorrectos en cuentas registradas. Así que simplemente deshabilité el campo y lo configuré a 'required' => false
si el usuario está conectado.
if ( is_user_logged_in() ) {
$fields['billing']['billing_email'] = [
'label' => 'Correo electrónico',
'required' => false,
'custom_attributes' => [
'disabled' => 'disabled',
]
];
} else {
$fields['billing']['billing_email'] = [
'label' => 'Correo electrónico',
'required' => true,
];
}
¡Espero que esto ayude a alguien por ahí!

Hola Manuel, bienvenido a wordpress.stackexchange. Aunque tu respuesta es técnicamente correcta, tengo que votar negativamente porque editar un plugin de esa manera no es recomendable. ¿Qué pasaría si el plugin se actualiza y los cambios se eliminan? Es mejor usar un hook o una función de filtro para lograr el objetivo del OP. Gracias por participar, espero que esta sea la primera de muchas respuestas útiles que proporcionarás :)

Lo voté positivamente, porque es una forma creativa de resolver un problema. No necesariamente la forma correcta, pero la encontraste y puede ser la única solución para algunos. No es justo ni correcto desalentar la solución, ya que se podría haber usado un child theme o cualquier otro número de anulaciones que están protegidas de las actualizaciones del plugin. La mejor manera es cambiar el campo [required] a 0 usando add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); valores: [billing_email] => Array ( [label] => Email address [required] => 1
