Woocommerce: Comprobando si la compra exitosa fue de un cliente nuevo o recurrente

Me pregunto si hay alguna manera de verificar si una compra exitosa fue de un cliente nuevo o recurrente.

Tengo un script que debe agregarse a la página de Order Success.

Lo tengo hasta ahora, lo que realmente no funciona como lo necesito, ya que solo está revisando el registro de invitados o de sesión iniciada:

$order = wc_get_order($order->id); $user = get_user_by('email', $order->billing_email); if (isset($user->ID)) { echo 'User is logged in.'; } else { echo 'User is a guest.'; } 

¡Gracias!

El siguiente código debería funcionar tanto para los clientes que regresan como para los nuevos, independientemente de un cambio en la dirección de correo electrónico de facturación. Esto también debería funcionar para que un nuevo cliente se registre mientras realiza el pago.

 add_action('woocommerce_thankyou', 'is_returning_customer', 10, 1); function is_returning_customer($order_id) { if (!$order_id) { return; } if(is_user_logged_in()) { $order_status = array('wc-on-hold', 'wc-processing', 'wc-completed'); $customer_id = get_current_user_id(); $customer_orders=get_posts( array( 'meta_key' => '_customer_user', 'meta_value' => $customer_id, 'post_type' => 'shop_order', 'post_status' => $order_status, 'numberposts' => -1 ) ); if(count($customer_orders)>1) { //returning customer } else { //new customer } } } 

Simplemente puede usar la función wordpress is_user_logged_in() con hook woocommerce_thankyou para verificar el estado de la orden y el usuario ha iniciado sesión o no.

 add_action('woocommerce_thankyou', 'my_custom_tracking', 10, 1); function my_custom_tracking($order_id) { if (!$order_id) { return; } // Lets grab the order $order = wc_get_order($order_id); $_billing_email = get_post_meta($order_id, '_billing_email', true); $user = get_user_by('email', $_billing_email); //for successful order if (in_array($order->status, ['processing', 'completed'])) { if (is_user_logged_in() || $user) { //it is a returning user } else { //user is a guest } } //unsuccessful order else { } } 

Por favor, tenga en cuenta: si desea marcar ÚNICAMENTE que el usuario está Conectado o no, reemplace if (is_user_logged_in() || $user) por if (is_user_logged_in())

Pregunta relacionada: woocommerce php snippets para proceder a la salida para saber si el usuario está o no conectado


ACTUALIZADO v2

 add_action('woocommerce_thankyou', 'wh_isReturningCustomer', 10, 1); function wh_isReturningCustomer($order_id) { if (!$order_id) { return; } // Lets grab the order //$order = wc_get_order($order_id); $_billing_email = get_post_meta($order_id, '_billing_email', true); $args = [ 'post_type' => 'shop_order', 'post__not_in' => [$order_id], //exclude current Order ID from order count 'post_status' => ['wc-processing', 'wc-completed'], 'posts_per_page' => -1, 'meta_query' => [ 'relation' => 'AND', [ 'key' => '_billing_email', 'value' => $_billing_email, 'compare' => '=', ] ] ]; $posts = new WP_Query($args); if ($posts->post_count) { //it is a returning user } else { //user is a guest } } 

El código va en el archivo function.php de su tema (o tema) hijo activo. O también en cualquier plugin de archivos php.
El código está probado y funciona.

¡Espero que esto ayude!