Cómo vincular los pedidos de invitados de WooCommerce a la cuenta del cliente después del registro

1 minuto de lectura

avatar de usuario de matin
matinal

Nuestro escenario es:

El usuario invitado ingresa al sitio y realiza uno o más pedidos sin necesidad de registrarse. Y después de un tiempo, decide registrarse en el sitio.

Ahora, ¿cómo vincular los pedidos de invitados a la cuenta del cliente después del registro?

Utilizo el siguiente código, pero este código solo funciona para usuarios que ya se han registrado pero no iniciaron sesión en el momento de la compra. ¿Algún consejo?

//assign user in guest order
add_action( 'woocommerce_new_order', 'action_woocommerce_new_order', 10, 1 );
function action_woocommerce_new_order( $order_id ) {
    $order = new WC_Order($order_id);
    $user = $order->get_user();
    
    if( !$user ){
        //guest order
        $userdata = get_user_by( 'email', $order->get_billing_email() );
        if(isset( $userdata->ID )){
            //registered
            update_post_meta($order_id, '_customer_user', $userdata->ID );
        }else{
            //Guest
        }
    }
}

Puedes usar el woocommerce_created_customer gancho de acción y el wc_update_new_customer_past_orders() función

Entonces obtienes:

function action_woocommerce_created_customer( $customer_id, $new_customer_data, $password_generated ) {
    // Link past orders to this newly created customer
    wc_update_new_customer_past_orders( $customer_id );
}
add_action( 'woocommerce_created_customer', 'action_woocommerce_created_customer', 10, 3 ); 

¿Ha sido útil esta solución?