Lo que intento hacer es cambiar los campos de pago para que, si un usuario ha iniciado sesión, no pueda editar su campo de correo electrónico de facturación.
Este código a continuación funciona muy bien, sin embargo, idealmente quiero eliminar la situación en la que los usuarios pueden tener 2 direcciones de correo electrónico en primer lugar y establecer el valor de $address_fields['billing']['billing_email'] para que sea la dirección de correo electrónico de los usuarios su cuenta
He intentado agregar
'value' => $current_user->user_emaily
'default' => $current_user->user_emaila la matriz, sin embargo, esto parece no hacer nada.
Asi que:
$current_user->user_email la forma correcta de obtener el correo electrónico de la cuenta (contacto) de los usuarios y no el correo electrónico de facturación de su cuenta. function custom_checkout_fields( $address_fields ) { $current_user = wp_get_current_user(); if ( is_user_logged_in() ) { unset( $address_fields['billing']['billing_email'] ); unset( $address_fields['billing']['billing_em_ver'] ); $address_fields['billing']['billing_email'] = [ 'label' => 'Email address', 'required' => false, 'description' => '<i><a href="/shop/my-account/customer-logout/">to change this please click here logout and login/register as another user</a> or <a href="/shop/my-account/edit-account/">click here to modify the address on your account</a></i>', 'custom_attributes' => [ 'disabled' => 'disabled', ] ]; return $address_fields; } else{ return $address_fields; } } add_filter( 'woocommerce_checkout_fields', 'custom_checkout_fields' ,20, 1 );En primer lugar, vaya a /plugins/woocommerce/templates/checkout , copie el archivo de plantilla form-billing.php que se encuentra en esa carpeta y péguelo en yourTheme/woocommerce/checkout/ .
En segundo lugar, evite que WooCommerce complete automáticamente el campo de dirección de correo electrónico editando el archivo de plantilla form-billing.php copiado y cambiando el siguiente fragmento:
<div class="woocommerce-billing-fields__field-wrapper"> <?php $fields = $checkout->get_checkout_fields( 'billing' ); foreach ( $fields as $key => $field ) { woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); } ?> </div>A esto:
<div class="woocommerce-billing-fields__field-wrapper"> <?php $fields = $checkout->get_checkout_fields( 'billing' ); foreach ( $fields as $key => $field ) { if ( 'billing_email' != $key ) { woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); } else { woocommerce_form_field( $key, $field ); } } ?> </div> En tercer lugar, inyecte el correo electrónico de WordPress en el campo, hágalo inmutable y agregue su descripción personalizada agregando lo siguiente al archivo functions.php de su tema:
function shillongtitude_billing_email_field($fields) { if ( is_user_logged_in() ) { $current_user = wp_get_current_user(); //set the user email as the email field value $fields['billing']['billing_email']['default'] = $current_user->user_email; //set the description $fields['billing']['billing_email']['description'] = '<i><a href="/shop/my-account/customer-logout/">to change this please click here logout and login/register as another user</a> or <a href="/shop/my-account/edit-account/">click here to modify the address on your account</a></i>'; // set attributes $fields['billing']['billing_email']['custom_attributes'] = array( 'readonly'=>'readonly', 'label' => 'Email address', 'required' => false ); return $fields; } else { return $fields; } } add_filter('woocommerce_checkout_fields', 'shillongtitude_billing_email_field');Úselo si necesita cambiar los detalles del usuario al enviar un nuevo pedido de woo
Esta función comparará los campos de pago:
nombre_de_facturación - apellido_de_facturación - correo_de_facturación
con campos de cuenta personal:
nombre - apellido - nombre para mostrar
y se actualizará en caso de discrepancia al enviar un nuevo pedido.
add_action('woocommerce_new_order', 'sync_woocommerce_email', 10, 2) ; function sync_woocommerce_email( $order_id ) { $current_user = wp_get_current_user(); $user_cname = $current_user->display_name; $user_fname = $current_user->first_name; $user_lname = $current_user->last_name; $user_fullname = $user_fname.' '.$user_lname; $bill_fname = $current_user->billing_first_name; $bill_lname = $current_user->billing_last_name; $bill_fullname = $bill_fname.' '.$bill_lname; if ($current_user->user_email != $current_user->billing_email) { wp_update_user( array ( 'ID' => $current_user->ID, 'user_email' => $current_user->billing_email ) ) ; } if ($current_user->display_name != $bill_fullname) { wp_update_user( array ( 'ID' => $current_user->ID, 'display_name' => $bill_fullname ) ) ; } }