Benötigen Sie Woocommerce, um nur 1 Produkt im Warenkorb zuzulassen. Wenn sich ein Produkt bereits im Warenkorb befindet und ein weiteres hinzugefügt wird, sollte das vorherige 1 entfernt werden

Lesezeit: 4 Minuten

Ich denke, dieser Code sollte funktionieren, bin mir aber nicht sicher, wo ich ihn platzieren soll. Alles, was ich versucht habe, ist bisher gescheitert …

add_action('init', 'woocommerce_clear_cart');

function woocommerce_clear_cart() {
global $woocommerce, $post, $wpdb;

$url = explode("https://stackoverflow.com/", 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
$slug=$url[4];
$postid = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_status="publish" AND post_name="$slug"");

    if ($postid){
        if ($postid == PRODUCTID1 || $postid == PRODUCTID2){
        $woocommerce->cart->empty_cart();
        }
    }

}

Leider gibt es keinen Aktionshaken, bevor WooCommerce einen Artikel in den Warenkorb legt. Aber sie haben einen “Filter”-Hook, bevor sie in den Warenkorb gelegt werden. So benutze ich es:

add_filter( 'woocommerce_add_cart_item_data', 'woo_custom_add_to_cart' );

function woo_custom_add_to_cart( $cart_item_data ) {

    global $woocommerce;
    $woocommerce->cart->empty_cart();

    // Do nothing with the data and return
    return $cart_item_data;
}

  • Hat bei mir perfekt funktioniert. Ich habe auch die Option eingestellt, die Menge des Artikels auf nur einen pro Bestellung zu begrenzen.

    – Marek Maurizio

    7. Juli 2014 um 12:15 Uhr

  • Hat auch bei mir perfekt funktioniert +1

    – stinkysGTI

    22. März 2016 um 23:48 Uhr

  • Wie können wir dies so ändern, dass wir die Menge auch auf nur 1 begrenzen können?

    – Benutzer658182

    13. Juni 2018 um 13:49 Uhr

Basierend auf der akzeptierten Antwort und der neuesten Woo-Version 2.5.1 habe ich die Funktion aktualisiert, um sie etwas sauberer zu machen, indem ich den Code verwende, den woo in class-wc-checkout.php verwendet, um den Warenkorb zu leeren

add_filter( 'woocommerce_add_cart_item_data', '_empty_cart' );

    function _empty_cart( $cart_item_data ) {

        WC()->cart->empty_cart();

        return $cart_item_data;
    }

Benotigen Sie Woocommerce um nur 1 Produkt im Warenkorb zuzulassen
Helgathewikinger

Dort ist ein Filter/Hook, der ausgeführt wird, bevor ein Artikel in den Warenkorb gelegt wird, da jedes Produkt vor dem Hinzufügen eine Validierung durchläuft.

Wenn wir also ein Produkt validieren, können wir prüfen, ob sich bereits Artikel im Warenkorb befinden, und diese löschen (wenn der aktuelle Artikel hinzugefügt werden kann) und eine Fehlermeldung hinzufügen.

/**
 * When an item is added to the cart, remove other products
 */
function so_27030769_maybe_empty_cart( $valid, $product_id, $quantity ) {

    if( ! empty ( WC()->cart->get_cart() ) && $valid ){
        WC()->cart->empty_cart();
        wc_add_notice( 'Whoa hold up. You can only have 1 item in your cart', 'error' );
    }

    return $valid;

}
add_filter( 'woocommerce_add_to_cart_validation', 'so_27030769_maybe_empty_cart', 10, 3 );

Benotigen Sie Woocommerce um nur 1 Produkt im Warenkorb zuzulassen
Digamber

Dies hat für mich wie ein Zauber funktioniert, das vorherige Produkt entfernt und das neue mit der neuen Produktkonfiguration hinzugefügt. Prost

Update: Für WooCommerce 3.0.X

function check_if_cart_has_product( $valid, $product_id, $quantity ) {  

            if(!empty(WC()->cart->get_cart()) && $valid){
                foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
                    $_product = $values['data'];

                    if( $product_id == $_product->get_id() ) {
                        unset(WC()->cart->cart_contents[$cart_item_key]);
                    }
                }
            }

            return $valid;

        }
        add_filter( 'woocommerce_add_to_cart_validation', 'check_if_cart_has_product', 10, 3 );

Für WooCommerce-Versionen kleiner als 3.0.X

function check_if_cart_has_product( $valid, $product_id, $quantity ) {  

    if(!empty(WC()->cart->get_cart()) && $valid){
        foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
            $_product = $values['data'];

            if( $product_id == $_product->id ) {
                unset(WC()->cart->cart_contents[$cart_item_key]);
            }
        }
    }

    return $valid;

}
add_filter( 'woocommerce_add_to_cart_validation', 'check_if_cart_has_product', 10, 3 );

Sie haben zwei Möglichkeiten:

  1. WooCommerce Min/Max-Mengen-Erweiterung
  2. Der folgende Code wurde zu Ihrer hinzugefügt functions.php Theme-Datei
    add_filter ( 'woocommerce_before_cart' , 'allow_single_quantity_in_cart' );
    function allow_single_quantity_in_cart() {
            global $woocommerce;

            $cart_contents  =  $woocommerce->cart->get_cart();
            $keys           =  array_keys ( $cart_contents );

            foreach ( $keys as $key ) {
                    $woocommerce->cart->set_quantity ( $key, 1, true );
            }
    }

1646645951 185 Benotigen Sie Woocommerce um nur 1 Produkt im Warenkorb zuzulassen
Roß

Fügen Sie Funktionen nicht direkt zu Ihren Commerce-Dateien hinzu … Sie verlieren Ihren gesamten Code, wenn Sie aktualisieren.

Benutzerfunktionen sollten immer über die functions.php Ihres Themes eingebunden werden.

Versuche dies,

Um alle Produkte aus dem Warenkorb zu entfernen und das zuletzt hinzugefügte hinzuzufügen,

//For removing all the items from the cart
global $woocommerce;
$woocommerce->cart->empty_cart();
$woocommerce->cart->add_to_cart($product_id,$qty);

Klassendatei ist wp-content/plugins/woocommerce/classes/class-wc-cart.php.

Sie können den obigen Code in der Funktion „Zum Warenkorb hinzufügen“ in der functions.php hinzufügen.

Hoffe es funktioniert..

964860cookie-checkBenötigen Sie Woocommerce, um nur 1 Produkt im Warenkorb zuzulassen. Wenn sich ein Produkt bereits im Warenkorb befindet und ein weiteres hinzugefügt wird, sollte das vorherige 1 entfernt werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy