2017-02-14 6 views
1

Мне интересно, есть ли способ проверить, была ли успешная покупка у нового или возвращающегося клиента.Woocommerce: проверка успешной покупки у нового или возвращающегося клиента

У меня есть сценарий, который необходимо добавить на страницу «Успех заказа».

У меня это до сих пор, что на самом деле не работает, как мне это нужно, чтобы, как это проверка только для гостя или вошедшего в кассе:

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

Спасибо!

ответ

0

Следующий код должен работать как для возвращающегося клиента, так и для нового клиента независимо от изменения адреса электронной платежной системы. Это также должно работать для регистрации нового клиента во время проверки.

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

Спасибо за помощь, оба ответа сработали для меня :) –

0

Вы можете просто использовать функцию wordpress is_user_logged_in() с помощью крючка woocommerce_thankyou, чтобы проверить статус заказа, и пользователь выполнил вход или нет.

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 { 

    } 
} 

Пожалуйста, обратите внимание: если вы хотите проверить только пользователь вошел в систему или нет, то замените if (is_user_logged_in() || $user) на if (is_user_logged_in())

связанный с этим вопрос: woocommerce php snippets for proceeded to checkout to know user is login or not


ОБНОВЛЕНО 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 
    } 
} 

Код идет в файле function.php вашего активного ch ild тема (или тема). Или также в любых плагинах php-файлов.
Код проверен и работает.

Надеюсь, это поможет!

+0

Благодарим за помощь! Единственная проблема, которую я могу найти, заключается в том, что если пользователь регистрируется во время оформления заказа и покупает продукт успешно, он всегда будет рассматриваться как «возвращающийся» клиент, поскольку он будет зарегистрирован, и их платежное электронное письмо будет найдено. Как это обойти? Еще раз спасибо. –

+0

@ stevie-c91: Я обновил свой ответ, пожалуйста, проверьте его. используйте функцию 'wh_isReturningCustomer()'. –

+0

Большое спасибо! Вы очень помогли! –