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;
}
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;
}

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 );

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:
- WooCommerce Min/Max-Mengen-Erweiterung
- 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 );
}
}

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..
9648600cookie-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 werdenyes