はい、これは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)ユーザーがログインしている場合のチェック、ショップやアーカイブページWP_Queryを変更しますがpre_get_posts
に夢中にカスタム関数彼はすでに、この特定の製品の購入した場合:
// 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
私は私のためにこれを書くために時間を取り出すために十分に感謝することはできません。メルシ! – NullHypothesis
ちょっと@loictheaztecこれはほとんどどこにでも隠れていますが、/ shop URLにアクセスすると(直接アクセスすることもできますし、ショッピングカートのセッションが切れて、新製品をもう一度追加するように求められる場合)、2行表示します。最初の行にはすべての自分の製品が含まれ、2番目の行には、非表示にするすべての製品が含まれています。最初の行がなぜ2番目の隠しが表示されているのかわからない - 別のループやフックをここに隠す必要があるのだろうか?その/店のエンドポイントはまだ製品を引っ張っているようだ – NullHypothesis