Jak ograniczyć zakup danego produktu do jednej sztuki w WooCommerce

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.

Podobne artykuły