2017-02-14 12 views
1

Ich frage mich, ob es eine Möglichkeit gibt zu überprüfen, ob ein erfolgreicher Kauf von einem neuen oder wiederkehrenden Kunden war.Woocommerce: Überprüfen, ob der Kauf erfolgreich war von einem neuen oder wiederkehrenden Kunden

Ich habe ein Skript, das auf der Seite Order Success hinzugefügt werden muss.

Ich habe dies so weit gekommen, was nicht wirklich funktioniert, wie ich es brauchen, da es nur die Überprüfung für die Gäste oder angemeldete in der Kasse ist:

$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.'; 
} 

Dank!

Antwort

0

Der folgende Code sollte für die Rückgabe von Kunden und Neukunden unabhängig von einer Änderung der E-Mail-Adresse für die Rechnungsstellung verwendet werden. Dies sollte auch für einen neuen Kunden funktionieren, der sich beim Auschecken registriert.

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 
     } 
    } 
} 
+0

Danke für Ihre Hilfe, beide Antworten funktionierten für mich :) –

0

Sie können einfach wordpress is_user_logged_in() Funktion mit Haken woocommerce_thankyou verwenden, um den Bestellstatus zu überprüfen und Benutzer ist angemeldet oder nicht.

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 { 

    } 
} 

Bitte beachten Sie: Wenn Sie nur Benutzer überprüfen wollen Angemeldete oder nicht, dann ersetzen if (is_user_logged_in() || $user) durch if (is_user_logged_in())

Verwandte Frage: woocommerce php snippets for proceeded to checkout to know user is login or not


AKTUALISIERT 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 
    } 
} 

Code geht in function.php Datei Ihrer aktiven ch ild Thema (oder Thema). Oder auch in beliebigen Plugin-PHP-Dateien.
Code ist getestet und funktioniert.

Hoffe, das hilft!

+0

Vielen Dank für Ihre Hilfe! Das einzige Problem, das ich feststellen kann, ist, dass wenn der Benutzer sich beim Checkout registriert und ein Produkt erfolgreich kauft, wird es immer als 'zurückkehrender' Kunde angesehen, da er eingeloggt ist und seine Rechnungsadresse gefunden wird. Irgendwie in der Nähe? Danke nochmal. –

+0

@ stevie-c91: Ich habe meine Antwort aktualisiert bitte überprüfen Sie es. Verwende die 'wh_isReturningCustomer()' Funktion. –

+0

Vielen Dank! Du warst eine große Hilfe! –

Verwandte Themen