Einschränken von Warenkorbartikeln auf dieselbe Produktkategorie in WooCommerce

Lesezeit: 4 Minuten

Einschranken von Warenkorbartikeln auf dieselbe Produktkategorie in WooCommerce
Tikki Pedicabs

Ich verwende den folgenden Code, um andere Artikel der WooCommerce-Produktkategorie aus dem Warenkorb zu entfernen, wenn ein Artikel mit einer speziellen Produktkategorie „cat_x“ im Warenkorb hinzugefügt wurde, und zeige einige andere benutzerdefinierte Hinweise an. Der Code kam von dieser Faden und funktioniert einfach gut:

add_action( 'woocommerce_check_cart_items', 'checking_cart_items' );
function checking_cart_items() {
    $special = false;
    $catx = 'cat_x';
    $number_of_items = sizeof( WC()->cart->get_cart() );

    if ( $number_of_items > 0 ) {

        // Loop through all cart products
        foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
            $item = $values['data'];
            $item_id = $item->id;

            // detecting if 'cat_x' item is in cart
            if ( has_term( $catx, 'product_cat', $item_id ) ) {
                if (!$special)
                    $special = true;
            }
        }

        // Re-loop through all cart products
        foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
            $item = $values['data'];
            $item_id = $item->id;

            if ( $special ) // there is a 'cat_x' item in cart
            { 
                if ( $number_of_items == 1 ) { // only one 'cat_x' item in cart
                    if ( empty( $notice ) )
                        $notice="1";
                }
                if ( $number_of_items >= 2 ) { // 'cat_x' item + other categories items in cart
            // removing other categories items from cart
                    if ( !has_term( $catx, 'product_cat', $item_id ) ) {
                        WC()->cart->remove_cart_item( $cart_item_key ); // removing item from cart
                        if ( empty( $notice ) || $notice == '1' )
                            $notice="2";
                    }
                }
            } else { // Only other categories items
                if ( empty( $notice ) )
                    $notice="3";
            }
        }

        // Firing notices
        if ( $notice == '1' ) { // message for an 'cat_x' item only (alone)
            wc_add_notice( sprintf( '<p class="woocommerce-error">bla bla bla one category X item in the cart</p>' ), 'success' );
        } elseif ( $notice == '2' ) { // message for an 'cat_x' item and other ones => removed other ones 
            wc_add_notice( sprintf( '<p class="woocommerce-error">bla bla bla ther is already category X in the cart => Other category items has been removed</p>' ), 'error' );
        } elseif ( $notice == '3' ) { // message for other categories items (if needed)
            wc_add_notice( sprintf( '<p class="woocommerce-error">bla bla bla NOT category X in the cart</p>' ), 'success' );
        }
    }
} 

Hat die bedingte Funktion hat_term() funktioniert auch mit Arrays von Kategorien, ich habe versucht, anstatt einer Kategorie, ein Array von Kategorien in diesem Code zu setzen. Aber es funktioniert nicht.

Allerdings haben sich meine Bedürfnisse geändert: Ich möchte dem Kunden nicht die Möglichkeit geben, Warenkorbartikel aus verschiedenen Kategorien auszuwählen. Der Warenkorb muss also immer Artikel aus derselben Produktkategorie enthalten.

Irgendwelche Hilfe bitte?

Danke.

Einschranken von Warenkorbartikeln auf dieselbe Produktkategorie in WooCommerce
LoicTheAztec

Das Erstellen einer benutzerdefinierten Funktion, die in den Filter-Hook woocommerce_add_to_cart_validation eingehakt ist, wird die Arbeit viel einfacher erledigen, ohne dass eine Reihe von Kategorien festgelegt werden muss.

Ihr Code wird also viel schneller und kompakter. Zusätzlich können Sie einen benutzerdefinierten Hinweis anzeigen, um den Kunden zu warnen.

Dieser Code verhindert das Hinzufügen zum Warenkorb, wenn sich ein Artikel einer anderen Kategorie im Warenkorb befindet:

add_filter( 'woocommerce_add_to_cart_validation', 'add_to_cart_validation_callback', 10, 3 );
function add_to_cart_validation_callback( $passed, $product_id, $quantity) {
    // HERE set your alert text message
    $message = __( 'MY ALERT MESSAGE.', 'woocommerce' );
    
    if( ! WC()->cart->is_empty() ) {
        // Get the product category terms for the current product
        $terms_slugs = wp_get_post_terms( $product_id, 'product_cat', array('fields' => 'slugs'));
        
        // Loop through cart items
        foreach (WC()->cart->get_cart() as $cart_item ){
            if( ! has_term( $terms_slugs, 'product_cat', $cart_item['product_id'] )) {
                $passed = false;
                wc_add_notice( $message, 'error' );
                break;
            }
        }
    }
    return $passed;
}

Code geht in die function.php-Datei Ihres aktiven Child-Themes (oder Themes) oder auch in jede Plugin-Datei.

Dieser Code ist getestet und funktioniert


Einschränken von Einkaufswagenartikeln auf nur aus verschiedenen Produktkategorien:

Ersetzen Sie in der Funktion die Bedingung:

if( ! has_term( $product_cats, 'product_cat', $cart_item['product_id'] )) { 

durch

if( has_term( $product_cats, 'product_cat', $cart_item['product_id'] )) {

1646246946 205 Einschranken von Warenkorbartikeln auf dieselbe Produktkategorie in WooCommerce
Wega-Studios

Ich habe es gerade versucht und ich habe einen Syntaxfehler im Array erhalten, das ich auf diese Weise behoben habe:

$terms_slugs = wp_get_post_terms($product_id, 'product_cat', array('fields' => 'slugs'));

nur ein Komma dahinter produkt_kat Ablenkung, aber vielleicht würde jemand sie brauchen.

915060cookie-checkEinschränken von Warenkorbartikeln auf dieselbe Produktkategorie in WooCommerce

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

Privacy policy