是的,這是可能的槽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
我不能感謝你足夠抽空出來寫這對我來說。留言Merci! – NullHypothesis
嘿@loictheaztec而這個隱藏幾乎無處不在,如果我去了/商店URL(可可以直接訪問,或者如果我的車會話過期,並要求我再增加新產品),那麼就說明我2行。第一行包含我所有的產品,第二行包含我想要隱藏的所有產品。所以,不知道爲什麼第一行顯示的擊打第二皮 - 有另一種環或鉤,我需要掛接到躲在這裏呢?該/終端似乎仍在拉動產品 – NullHypothesis