Tworzenie stron internetowych - poradnik
Aby ograniczyć zakup danego produktu do jednej sztuki w WooCommerce, można skorzystać z hooka woocommerce_add_cart_item_data
. Na początku wyświetlimy odpowiedni komunikat o błędzie, jeśli użytkownik próbuje dodać więcej niż jedną sztukę do koszyka:
add_filter( 'woocommerce_add_cart_item_data', 'validate_one_item_in_cart', 10, 3 );
function validate_one_item_in_cart( $cart_item_data, $product_id, $variation_id ) {
// Sprawdź, czy produkt jest już w koszyku
$cart_items = WC()->cart->get_cart();
foreach ( $cart_items as $cart_item ) {
if ( $cart_item['product_id'] === $product_id ) {
wc_add_notice( __('Możesz dodać tylko jedną sztukę tego produktu do koszyka.', 'woocommerce'), 'error' );
return $cart_item_data;
}
}
return $cart_item_data;
}
Kod ten używa hooka woocommerce_add_cart_item_data
, który jest wywoływany, gdy produkt jest dodawany do koszyka. W funkcji validate_one_item_in_cart
kod sprawdza, czy produkt jest już w koszyku, iterując po wszystkich elementach koszyka. Jeśli produkt już istnieje w koszyku, wyświetlany jest komunikat o błędzie, a produkt nie jest dodawany do koszyka.
Jeśli jednak zdarzy się, że produkt z jakiegoś powodu doda się do koszyka, należy usunąć go za pomocą funkcji remove_cart_item()
i klucza koszyka.
$cart_item_key = $cart_item['key'];
WC()->cart->remove_cart_item( $cart_item_key );
Możemy również w komunikacie błędu dodać link do zamówienia, aby ułatwić użytkownikowi dokończenie zakupów. Finalnie kod wygląda tak:
add_filter( 'woocommerce_add_cart_item_data', 'validate_one_item_in_cart', 30, 3 );
function validate_one_item_in_cart( $cart_item_data, $product_id, $variation_id ) {
// Sprawdź, czy produkt jest już w koszyku
$cart_items = WC()->cart->get_cart();
foreach ( $cart_items as $cart_item ) {
if ( $cart_item['product_id'] === $product_id ) {
$zamowienie_url = wc_get_checkout_url();
wc_add_notice( __('Możesz dodać tylko jedną sztukę tego produktu. Przejdź do <a href="' . $zamowienie_url . '">koszyka</a>, aby złożyć zamówienie.', 'woocommerce'), 'error' );
$cart_item_key = $cart_item['key'];
WC()->cart->remove_cart_item( $cart_item_key );
return $cart_item_data;
}
}
return $cart_item_data;
}
Należy go umieścić w pliku function.php motywu potomnego.