W sklepie e-commerce:
Na stronie głównej są wyświetlane elementy, a pod każdym z nich znajduje się przycisk „Dodaj do koszyka”. Po kliknięciu tego przycisku element jest dodawany do koszyka. Jeśli ten przycisk zostanie kliknięty ponownie, Ilość przedmiotu, który już istnieje w koszyku, zwiększa się o 1. Myślę, że to jest pętla . Na razie w porządku.
Na stronie pojedynczego produktu znajduje się przycisk „Dodaj do koszyka”. Po kliknięciu tego przycisku przedmiot zostaje dodany do koszyka. Istnieje również pole tekstowe Ilość, które można wykorzystać do zmiany ilości. To też jest w porządku.
PROBLEM:
Muszę rozróżnić przycisk „Dodaj do koszyka”, który został kliknięty w pętli (obecnie na stronie głównej, ale może być również używany na innych stronach, takich jak strona Archiwum itp.), A przyciskiem „Dodaj do koszyka”, który został kliknięty na stronie pojedynczego produktu. W oparciu o to zróżnicowanie, oto co muszę zrobić:
- Jeśli kliknięty został przycisk „Dodaj do koszyka” pojawiający się w pętli, weź Ilość tego produktu, który już istnieje w koszyku, używając
$cart_item_key
, zwiększ go o 1 i wyślij go do funkcji niestandardowej, która wykona dodatkowe przetwarzanie i zapisze szczegóły do koszyka ponownie. - Jeśli kliknięty został przycisk „Dodaj do koszyka” pojawiający się na stronie Pojedynczy produkt, weź Ilość tego produktu, który już istnieje w koszyku za pomocą
$cart_item_key
, pomnóż go przez 3 i wyślij go do funkcji niestandardowej, która wykona dodatkowe przetwarzanie i zapisze szczegóły do koszyka ponownie. - W obu powyższych przypadkach ilość jest zmieniana w oparciu o różne logiki i ta ilość musi zostać wysłana do wywołania funkcji niestandardowej.
CO SPRÓBOWAŁEM:
Próbowałem następującego kodu:
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();
}
Problem z powyższym kodem polega na tym, że jeśli nie mam if... else if...
logiki, kod jest wykonywany niezależnie od tego, gdzie znajduje się przycisk „Dodaj do koszyka”. Innymi słowy, czy kliknę przycisk „Dodaj do koszyka” znajdujący się w pętli (strona główna, strona Archiwum lub dowolna strona korzystająca z pętli), czy kliknę przycisk „Dodaj do koszyka” znajdujący się na stronie pojedynczego produktu, powyższy kod jest wykonywany przy braku if... else if...
logiki.
Chcę uruchomić osobny kod po kliknięciu przycisku „Dodaj do koszyka” znajdującego się w pętli (niezależnie od jego lokalizacji, strony głównej, archiwów itp.) I uruchomić inny kod po naciśnięciu przycisku „Dodaj do koszyka” , który znajduje się na stronie Pojedynczy produkt, zostaje kliknięty. Jak mogę to osiągnąć?
Oczekiwanie czegoś takiego:
- Jeśli kliknięty zostanie przycisk pojawiający się w pętli -> Zrób to.
- Jeśli kliknięty zostanie przycisk pojawiający się na stronie Pojedynczy produkt -> Zrób to.