2016-08-10 82 views

回答

5

更新:New updated improved, light and faster version HERE


是有可能創建條件函數返回true客戶已至少一個訂單與完成的狀態

以下是此條件函數的代碼:

function has_bought() { 

    // Get all customer orders 
    $customer_orders = get_posts(array(
     'numberposts' => -1, 
     'meta_key' => '_customer_user', 
     'meta_value' => get_current_user_id(), 
     'post_type' => 'shop_order', // WC orders post type 
     'post_status' => 'wc-completed' // Only orders with status "completed" 
    )); 
    // Count number of orders 
    $count = count($customer_orders); 

    // return "true" when customer has already one order 
    if ($count > 0) 
     return true; 
    else 
     return false; 
} 

該代碼測試和工程。

此代碼發表在您的活動子主題或主題的function.php文件中,或者插入到一個插件php文件中。


用法(作爲條件)

  • 你可以在一些WooCommerce templates,你將先前複製到活動的子主題或主題使用它。
  • 在你的主題php文件。
  • 在插件php文件
  • 任何PHP函數或WordPress/WooCommerce。

參考

+0

非常感謝。這是非常有用的 –

+0

任何方式來顯示/返回最近一次購買的日期在同一時間? –

+0

@RodrigoM如果客戶一次性成功購買,返回true – LoicTheAztec

0

簡體版:

function has_bought() { 
    // Get all customer orders 
    $customer_orders = get_posts(array(
     'numberposts' => -1, 
     'meta_key' => '_customer_user', 
     'meta_value' => get_current_user_id(), 
     'post_type' => 'shop_order', // WC orders post type 
     'post_status' => 'wc-completed' // Only orders with status "completed" 
    )); 
    // return "true" when customer has already one order 
    return count($customer_orders) > 0 ? true : false; 
} 
1

^h ere是一個重量更輕,速度更快的條件函數,如果客戶已經購買了女傭,則返回true。

有一個可選的參數$user_id,這將允許你指定一個定義的用戶ID:

function has_bought($user_id = 0) { 
    global $wpdb; 
    $customer_id = $user_id == 0 ? get_current_user_id() : $user_id; 
    $paid_order_statuses = array_map('esc_sql', wc_get_is_paid_statuses()); 

    $results = $wpdb->get_col(" 
     SELECT p.ID FROM {$wpdb->prefix}posts AS p 
     INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id 
     WHERE p.post_status IN ('wc-" . implode("','wc-", $paid_order_statuses) . "') 
     AND p.post_type LIKE 'shop_order' 
     AND pm.meta_key = '_customer_user' 
     AND pm.meta_value = $customer_id 
    "); 

    // Count number of orders and return a boolean value depending if higher than 0 
    return count($results) > 0 ? true : false; 
} 

代碼放在您的活動子主題(或主題)的function.php文件或也以任何插件文件。

此代碼已在Woocommerce 3+上測試過並且可以工作(它也應該可以在以前的版本上運行)。

對於多個產品:Check if a customer has purchased a specific products in WooCommerce


使用例1(登錄顧客)

if(has_bought()) 
    echo '<p>You have already maid a purchase</p>'; 
else 
    echo '<p>Welcome, for your first purchase you will get a discount of 10%</p>'; 

使用例2(設置$ USER_ID)

// Define the user ID 
$user_id = 85; 

if(has_bought($user_id)) 
     echo '<p>customer have already maid a purchase</p>'; 
    else 
     echo '<p>Customer with 0 purchases</p>'; 

如果$user_id沒有定義和當前用戶沒有登錄,這個函數將返回false

該函數的代碼部分基於內置的WooCommerce函數wc_customer_bought_product的源代碼。

+0

關於如何將它變成短代碼的想法,所以我可以用它來包裝內容? – Garconis

+0

是的,它可以在短代碼中輕鬆完成......您需要什麼規格? *(如果你喜歡/希望你可以upvote這個有用的答案)* ... – LoicTheAztec

0

如果客戶檢查已啓用了該功能可以幫助

只需發送$ CUSTOMER_EMAIL作爲參數和功能將檢查所有訂單的電子郵件,並返回true或false。

​​
相關問題