2017-10-13 88 views
1

註冊用戶顯示產品僅當用戶註冊並且未購買此產品(新用戶產品)時才顯示產品。向WooCommerce

他們購買此產品後,它不再可供該用戶購買(因爲它是一次性交易)。

所以這意味着我買了它之後,並嘗試直接導航到該產品的URL或搜索所有產品等,這個項目不會顯示出來。

如果我是一個新用戶,並沒有購買它,當然,它應該出現在任何地方。

我有一個用戶自定義屬性(元數據),表明他們是否購買它。購買後,我會將此用戶標誌設置爲true,表示它不能再顯示。

我有兩個問題:

  1. 有沒有辦法掛接到一個項目的實際成功購買,並設置該用戶的標誌是真的嗎?
  2. 如何指示Woo在標誌爲真時不顯示此產品?

謝謝!

回答

2

是的,這是可能的槽3個功能:

1)條件函數,將檢查該客戶已經購買的特定產品:

function has_bought_items($user_id = 0, $product_id = 0) { 
    // The customer ID 
    $customer_id = $user_id == 0 || $user_id == '' ? get_current_user_id() : $user_id; 

    // Retrieve your customer flag '_has_bought_flag' (or replace it by your slug) 
    if (get_user_meta($customer_id, '_has_bought_flag', true)) 
     return true; 
    else 
     return false; 
} 

代碼放在的function.php文件你活躍的孩子主題(或主題),或任何插件文件。

2)自定義功能鉤住pre_get_posts,這將改變對商店和檔案頁面WP_Query,如果用戶登錄並檢查是否他已經買了這個特定的產品:

// Changing the WP_Query loop conditionally 
add_action('pre_get_posts', 'conditional_product_query', 10, 1); 
function conditional_product_query($q) { 

    // HERE set your product ID 
    $product_id = 37; 

    if(! is_user_logged_in() || has_bought_items('', $product_id)) 
     $q->set('post__not_in', array($product_id)); 
} 

當條件匹配時,它將徹底清除此產品。

代碼會出現在您的活動子主題(或主題)的function.php文件中,或者也存在於任何插件文件中。

3)自定義功能鉤住woocommerce_order_status_completed,將設置客戶標誌時訂單狀態得到「已完成」的時候,產品的順序,當客戶標誌尚不存在:

// When Order get the "completed" status (paid) we check and we set the user flag (if necessary) 
add_action('woocommerce_order_status_completed', 'set_customer_specific_product_flag', 10, 2); 
function set_customer_specific_product_flag($order_id, $order) { 

    // HERE set your product ID 
    $product_id = 37; 

    // If customer has already bought the product we exit 
    if(has_bought_items($order->get_user_id(), $product_id)) return; 

    // Checking order items (if it match we update user meta data 
    foreach($order->get_items() as $product_item){ 
     if ($product_item->get_product_id() == $product_id){ 
      update_user_meta($order->get_user_id(), '_has_bought_flag', '1'); 
      break; 
     } 
    } 
} 

代碼在你的活動子主題(或主題)的function.php文件中,或者也在任何插件文件中。

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


相關答案:Checking if customer has already bought something in WooCommerce

+0

我不能感謝你足夠抽空出來寫這對我來說。留言Merci! – NullHypothesis

+0

嘿@loictheaztec而這個隱藏幾乎無處不在,如果我去了/商店URL(可可以直接訪問,或者如果我的車會話過期,並要求我再增加新產品),那麼就說明我2行。第一行包含我所有的產品,第二行包含我想要隱藏的所有產品。所以,不知道爲什麼第一行顯示的擊打第二皮 - 有另一種環或鉤,我需要掛接到躲在這裏呢?該/終端似乎仍在拉動產品 – NullHypothesis