eコマースストア:
ホームページに表示されているアイテムがあり、各アイテムの下に[カートに追加]ボタンがあります。このボタンをクリックすると、アイテムがカートに追加されます。このボタンをもう一度クリックすると、カートに既に存在する商品の数量が1増えます。これはループだと思います。ここまでは順調ですね。
単一の製品ページに、「カートに追加」ボタンがあります。このボタンをクリックすると、アイテムがカートに追加されます。数量を変更するために使用できる数量入力テキストボックスもあります。これも結構です。
問題:
ループ内でクリックされた[カートに追加]ボタン(現在はホームページですが、アーカイブページなどの他のページでも使用できます)とクリックされた[カートに追加]ボタンを区別する必要があります単一の製品ページ。この差別化に基づいて、ここに私がする必要があるものがあります:
- ループ内に表示される[カートに追加]ボタンがクリックされた場合は、を使用してカートに既に存在するこのアイテムの数量を 取得し、
$cart_item_key
1増やして、追加の処理を実行して詳細を保存するカスタム関数に送信します再びカートに入れます。 - [単一の商品]ページに表示される[カートに追加]ボタンをクリックした場合は、を使用してカートに既に存在するこのアイテムの数量を 取得し、
$cart_item_key
3を掛けて、追加の処理を実行して保存するカスタム関数に送信します再度カートに入れる詳細。 - 上記のどちらの場合も、さまざまなロジックに基づいて数量が変更され、この数量をカスタム関数呼び出しに送信する必要があります。
私が試したもの:
私は次のコードを試しました:
add_action('woocommerce_add_to_cart', 'custom_action_add_to_cart', 20, 6);
function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{
$cart = WC()->cart->get_cart();
$product = wc_get_product($product_id);
// NEED TO RUN CUSTOM CODE HERE BASED ON THE CHECKS
if (add to cart within loop is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart + 1;
}
else if (add to cart on single product page is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart * 3;
}
// Need to send the $new_quantity along with the $cart_item_key to the custom function so that the data can be saved using $cart_item_key
my_custom_function($new_quantity, $cart_item_key);
}
function my_custom_function($new_quantity, $cart_item_key)
{
echo $new_quantity;
WC()->cart->cart_contents[$cart_item_key]['custom_quantity'] = $new_quantity;
WC()->cart->set_session();
}
上記のコードの問題は、if... else if...
ロジックがない場合、[カートに追加]ボタンの場所に関係なくコードが実行されることです。つまり、ループ(ホームページ、アーカイブページ、またはループを使用するページ)にある[カートに追加]ボタンをクリックするか、単一の製品ページにある[カートに追加]ボタンをクリックするか、上記のコードは、if... else if...
ロジックがない場合に実行されます。
したがって、ループにある[カートに追加]ボタンがクリックされたときに別のコードを実行し(場所、ホームページ、アーカイブなどに関係なく)、[カートに追加]ボタンがクリックされたときに別のコードを実行したい単一の製品ページにあるそれをクリックします。どうすればこれを達成できますか?
次のようなものが期待されます:
- ループ内に表示されるボタンをクリックした場合->これを行います。
- 単一製品ページに表示されるボタンをクリックした場合->それを行います。