Evite el formulario de facturación de pago de WooCommerce para sobrescribir los datos de usuario predeterminados de WordPress

2 minutos de lectura

Avatar de usuario de Yahya Essam
Yahya Essam

en la base de datos tenemos metausuario tabla que contiene:
El first_name y last_name campos

Esos son el nombre y apellido predeterminados de WordPress.

Y también tenemos:
El billing_first_name y billing_last_name.

ahora, cuando el usuario completa el formulario de facturación y continúa con el proceso de pago, Woocommerce actualiza ambos campos con los nuevos valores de los campos de nombre de facturación (los predeterminados).

He intentado muchas cosas usando acciones como:

woocommerce_before_checkout_billing_form

o

woocommerce_after_checkout_billing_form

También intenté actualizar meta con:

update_user_meta()

Pero no está funcionando.

Quiero que no sobrescriba el nombre y el apellido predeterminados, sino que mantenga los nuevos valores solo en billing_first_name y billing_last_name

Creo que el proceso predeterminado es así.
https://gist.github.com/claudiosanches/ae9a8b496c431bec661b69ef73f1a087

¿Alguna ayuda en esto por favor?

La forma es usar una función personalizada enganchada woocommerce_checkout_update_customer gancho de acción:

add_action('woocommerce_checkout_update_customer','custom_checkout_update_customer', 10, 2 );
function custom_checkout_update_customer( $customer, $data ){

    if ( ! is_user_logged_in() || is_admin() ) return;

    // Get the user ID
    $user_id = $customer->get_id();

    // Get the default wordpress first name and last name (if they exist)
    $user_first_name = get_user_meta( $user_id, 'first_name', true );
    $user_last_name = get_user_meta( $user_id, 'last_name', true );

    if( empty( $user_first_name ) || empty( $user_last_name ) ) return;

    // We set the values by defaul worpress ones, before it's saved to DB
    $customer->set_first_name( $user_first_name );
    $customer->set_last_name( $user_last_name );
}

El código va en el archivo function.php de su tema secundario activo (o tema) o también en cualquier archivo de complemento.

Probado y funciona en WooCommerce 3+

  • ¿Hay alguna forma de almacenar los datos de facturación en una nueva tabla de base de datos?

    – Yahya Essam

    17 de agosto de 2017 a las 12:22


  • @YahyaEssam, es mejor que cree metadatos de usuario relacionados personalizados, será más fácil y asequible… ¿no cree?

    – LoicTheAztec

    17 de agosto de 2017 a las 12:44

  • ¿Por qué WooCommerce cambiaría esto? Tienen billing_first_name, billing_last_name por una razón, ¿por qué meterse con las metas de nombre/apellido de WordPress? Tonto. Gracias por el fragmento, funciona.

    – Martes

    8 de diciembre de 2017 a las 22:02


¿Ha sido útil esta solución?