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.
źródło
Możesz spróbować w ten sposób:
Ale musisz sprawdzić swoje ustawienia.
Settings > Permalinks
.źródło
możesz użyć
is_product()
,is_product_category()
funkcjiźródło
$new_quantity = $quantity_from_cart * 3;
zadziała. Ale tak nie jest. Po prostu zwiększa obecną ilość w koszyku, ale NIE mnoży ilości przez 3 . Jak to naprawić?if ( is_product() )
jest nie wykonywane. Nie mogę znaleźć przyczyny, dla której! Czy to ważne, że jest to przycisk Dodaj do koszyka AJAX?Mogę wymyślić kilka rozwiązań. Ale oto jeden:
Możemy dodać ukryte dane wejściowe w formularzu, że robi to powyższy kod.
Następnie może sprawdzić jego wartość jak:
Pamiętaj, że to tylko pomysł, a nie kompletne rozwiązanie ... Musisz zająć się przyciskiem ajax.
źródło
$button_location