Suchen Sie mit WooCommerce nach der Produktkategorie in den Warenkorbartikeln

Lesezeit: 4 Minuten

Suchen Sie mit WooCommerce nach der Produktkategorie in den Warenkorbartikeln
Al Sepp

Ich versuche, eine Bedingung zu schaffen, bei der eine Funktion nur auf der WooCommerce-Checkout-Seite angezeigt wird, wenn ein Produkt aus der Kategorie vorhanden ist ilutulestik ist im Warenkorb vorhanden.

Derzeit scheint es jedoch nicht möglich zu sein, Warenkorbinformationen abzurufen. Ich nehme das denn an, wenn ich nutze if ( $cat_in_cart ) Bedingung für einen Code, die Funktion, die ich damit verwende, wird nicht angezeigt, auch wenn ich ein Produkt aus habe ilutulestik Kategorie im Warenkorb vorhanden.

Ich habe viele verschiedene Methoden ausprobiert, um Warenkorbinformationen zu erhalten, aber keine schien zu funktionieren. Ich werde 2 Möglichkeiten einschließen, wie ich es unten versucht habe:

Versuchen Sie 1

add_action('woocommerce_before_cart', 'kontrollime_ilutulestiku_olemasolu');

    function kontrollime_ilutulestiku_olemasolu()
    {

        global $woocommerce;
        $cat_in_cart = false;

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

                if ( has_term( 'ilutulestik-2', 'product_cat', $item_id ) )
                {
                    $cat_in_cart = true;
                    break;
                }
            }
    }

Versuchen Sie 2

add_action('woocommerce_before_cart', 'kontrollime_ilutulestiku_olemasolu');

     function kontrollime_ilutulestiku_olemasolu($package)
     {

        global $woocommerce;
        $cat_in_cart = false;

            foreach ($package['contents'] as $product)
            {
                // get product categories
                $product_cats = wp_get_post_terms( 
$product['product_id'], 'product_cat', array('fields' => 'names') );
                // if it has category_name unset flat rate
                    if( in_array('ilutulestik-2', $product_cats) )
                    {
                    $cat_in_cart = true;
                    break;
                    }  
            }         
    }

Ich erwarte, dass dieser Codeabschnitt überprüft, ob sich ein Produkt im Warenkorb befindet, das zur Kategorie gehört Ilutulestik (oder Schnecke ilutulestik-2) und wenn ja, ändern $cat_in_cart Wert zu truedamit ich später jeden Code mit aktivieren konnte if ( $cat_in_cart ).

Suchen Sie mit WooCommerce nach der Produktkategorie in den Warenkorbartikeln
LoicTheAztec

Die richtige Art und Weise, wie Warenkorbartikel mit Produktkategorien verwendet werden, ist:

add_action('woocommerce_before_cart', 'action_before_cart');
function action_before_cart() {
    $categories   = array('ilutulestik-2');
    $has_category = false;
    
    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // Check for product categories
        if ( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ) {
            $has_category = true;
            break;
        }
    }
    
    // Testing output (display a notice)
    if ( $has_category ) { 
        wc_print_notice( sprintf( 'Product category "%s" is in cart!', reset($categories)), 'notice' );
    }
}

Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.


Wenn Sie auch nachsehen müssen übergeordnete Begriffe Bei Produktkategorien verwenden Sie stattdessen:

// Custom conditional function that handle parent product categories too
function has_product_categories( $categories, $product_id = 0 ) {
    $parent_term_ids = $categories_ids = array(); // Initializing
    $taxonomy        = 'product_cat';
    $product_id      = $product_id == 0 ? get_the_id() : $product_id;

    if( is_string( $categories ) ) {
        $categories = (array) $categories; // Convert string to array
    }

    // Convert categories term names and slugs to categories term ids
    foreach ( $categories as $category ){
        $result = (array) term_exists( $category, $taxonomy );
        if ( ! empty( $result ) ) {
            $categories_ids[] = reset($result);
        }
    }

    // Loop through the current product category terms to get only parent main category term
    foreach( get_the_terms( $product_id, $taxonomy ) as $term ){
        if( $term->parent > 0 ){
            $parent_term_ids[] = $term->parent; // Set the parent product category
            $parent_term_ids[] = $term->term_id; // (and the child)
        } else {
            $parent_term_ids[] = $term->term_id; // It is the Main category term and we set it.
        }
    }
    return array_intersect( $categories_ids, array_unique($parent_term_ids) ) ? true : false;
}

add_action('woocommerce_before_cart', 'action_before_cart');
function action_before_cart() {
    $categories   = array('ilutulestik-2');
    $has_category = false;

    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // Check for product categories
        if ( has_product_categories( $cart_item['product_id'], $categories ) ) {
            $has_category = true;
            break;
        }
    }

    // Testing output (display a notice)
    if ( $has_category ) {
        wc_print_notice( sprintf( 'Product category "%s" is in cart!', reset($categories)), 'notice' );
    }
}

Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.

  • Danke für die Antwort. Ich habe diesen Code ausprobiert, aber leider hat er nicht funktioniert (Hinweis wurde nicht gedruckt). Was vermisse ich?

    – Alo Sepp

    21. Januar 2019 um 21:02 Uhr

  • @AloSepp Also stimmt etwas mit Ihrer Produktkategorie nicht… Diese Antwort wurde getestet und funktioniert perfekt mit allen Produktkategorien.

    – LoicTheAztec

    21. Januar 2019 um 21:06 Uhr


  • Kannst du das bitte klären? Beim Erstellen einer Produktkategorie müssen keine zusätzlichen Felder ausgefüllt werden. Name ist ‘Ilutulestik’ und Slug ist ‘ilutulestik-2’.

    – Alo Sepp

    21. Januar 2019 um 21:11 Uhr

  • @AloSepp Der Antwortcode ist etwas sehr Klassisches und wird in vielen funktionierenden Antworten hier auf stackOverFlow verwendet. Es gibt nichts zu klären und niemand kann Ihre Produktkategorieeinstellungen überprüfen oder erraten.

    – LoicTheAztec

    21. Januar 2019 um 21:15 Uhr

  • Fand es! Ich war so auf die Sache konzentriert, dass ich es nicht bemerkte, ich bat darum, den Warenkorb zu sehen, anstatt die Kasse, was ich wirklich brauchte. Ich denke, ich kann denselben Code mit geringfügigen Anpassungen verwenden, um ihn an der Kasse anzuzeigen.

    – Alo Sepp

    22. Januar 2019 um 6:12 Uhr

1004250cookie-checkSuchen Sie mit WooCommerce nach der Produktkategorie in den Warenkorbartikeln

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

Privacy policy