Chcę uniemożliwić użytkownikom dodawanie produktów z różnych kategorii do koszyka za jednym razem. Powiedz, że jeśli użytkownik przejdzie do innej kategorii i spróbuje dodać produkt do koszyka, otrzyma najpierw koszyk wyczyszczony. Czy ktoś wie, jak mogę się do tego podejść? Jestem nowicjuszem w takich rzeczach. DziękiWoocommerce - Zapobieganie Dodawanie pozycji z dwóch różnych kategorii do koszyka
5
A
Odpowiedz
6
Rozwiązałem to wcześniej. My write-up is here.
Różni się nieco od Twojego wniosku tym, że zamiast wyczyścić koszyk, gdy próbuje dodać drugą kategorię, zatrzymuje oryginalny przedmiot w koszyku i wyświetla ostrzeżenie.
Dla potomności:
<?php
// Enforce single parent category items in cart at a time based on first item in cart
function get_product_top_level_category ($product_id) {
$product_terms = get_the_terms ($product_id, 'product_cat');
$product_category_term = $product_terms[0];
$product_category_parent = $product_terms[0]->parent;
while ($product_category_parent != 0) {
$product_category_term = get_term($product_category_parent, 'product_cat');
$product_category_parent = $product_category_term->parent;
}
return $product_category_term;
}
add_filter ('woocommerce_before_cart', 'restrict_cart_to_single_category');
function restrict_cart_to_single_category() {
global $woocommerce;
$cart_contents = $woocommerce->cart->get_cart();
$cart_item_keys = array_keys ($cart_contents);
$cart_item_count = count ($cart_item_keys);
// Do nothing if the cart is empty
// Do nothing if the cart only has one item
if (! $cart_contents || $cart_item_count == 1) {
return null;
}
// Multiple Items in cart
$first_item = $cart_item_keys[0];
$first_item_id = $cart_contents[$first_item]['product_id'];
$first_item_top_category = get_product_top_level_category ($first_item_id);
$first_item_top_category_term = get_term ($first_item_top_category, 'product_cat');
$first_item_top_category_name = $first_item_top_category_term->name;
// Now we check each subsequent items top-level parent category
foreach ($cart_item_keys as $key) {
if ($key == $first_item) {
continue;
}
else {
$product_id = $cart_contents[$key]['product_id'];
$product_top_category = get_product_top_level_category($product_id);
if ($product_top_category != $first_item_top_category) {
$woocommerce->cart->set_quantity ($key, 0, true);
$mismatched_categories = 1;
}
}
}
// we really only want to display this message once for anyone, including those that have carts already prefilled
if (isset ($mismatched_categories)) {
echo '<p class="woocommerce-error">Only one category allowed in cart at a time.<br />You are currently allowed only <strong>'.$first_item_top_category_name.'</strong> items in your cart.<br />To order a different category empty your cart first.</p>';
}
}
?>
Powiązane problemy
- 1. woocommerce: Automatyczne przekierowanie do koszyka po dodaniu produktu z kategorii
- 2. Dodawanie pozycji koszyka Ruby on Rails
- 3. Otrzymuj nazwę pozycji koszyka, ilość wszystkich szczegółów woocommerce
- 4. WooCommerce: Wyświetl nazwę kategorii
- 5. Woocommerce, Jak edytować wiadomość "dodano do koszyka"
- 6. Opłaty za dodawanie warunkowe do koszyka
- 7. WooCommerce: Dodaj produkt do koszyka z pominięciem ceny?
- 8. Dodawanie Woocommerce Dodaj do koszyka Przycisk do pokrewnych produktów i listy produktów
- 9. Aktualizacja koszyka Woocommerce po dodaniu produktu (jQuery)
- 10. WooCommerce - Ajax Dodaj do koszyka i aktualizuj Totalnie
- 11. Woocommerce dodaj do koszyka ajax i mini-cart
- 12. Dodawanie/zsumowanie dwóch tablic
- 13. Programowe dodawanie produktów do zdalnego koszyka użytkownika magento
- 14. Dodawanie elementów z dwóch zestawów
- 15. Dodawanie pozycji do listy w słowniku
- 16. Dodanie produktu do koszyka z niestandardową informacją i ceną
- 17. Dodawanie atrybutu kategorii w Magento 1.8.1
- 18. Wyświetl warunki lub atrybuty produktu dla konkretnej kategorii produktu (woocommerce)
- 19. Jak przekazywać wartości do dwóch różnych parametrów
- 20. Przekazywanie argumentów wielokropka do dwóch różnych funkcji?
- 21. Dodawanie dwóch krotek elementwise
- 22. Dodawanie dwóch liczb
- 23. Szyny z dwóch różnych baz danych
- 24. Korzystanie z funkcji ng-click do wywoływania dwóch różnych funkcji
- 25. WP7 Zapobieganie przewijaniu ListBox
- 26. Woocommerce pokazuje, że koszyk jest pusty w firefoxie, po dodaniu produktów do koszyka
- 27. Jak wstawić produkt do koszyka przez api odpoczynku podanego przez woocommerce?
- 28. WooCommerce Pokaż koszyk Przedmioty na kasie Strona
- 29. Dodawanie dwóch ramek danych pandy
- 30. dodawanie/usuwanie pozycji z danymi JSON z JQuery
dziękuję, to naprawdę rozwiązuje problemu i działa idealnie ... – Lordwhizy
Jesteś mile widziane. Powodzenia w projekcie. – Dez
Działa to świetnie! Mam pytanie, czy możliwe jest również włączenie lub zablokowanie przedmiotów dodawanych do koszyka przez ajax? Miałem ten problem już od jakiegoś czasu przy dodawaniu przedmiotów za pośrednictwem ajax, to pokazuje w koszyku ajax na stronie, że oba elementy są. Po kliknięciu na koszyku widokowym ta metoda działa, ale po przejściu do "kasy" bezpośrednio, pozwala na dwie różne kategorie naraz. –