Woocommerce Bestellen Sie das Warenkorb-Array nach Katze und Sub-Katze


8

Hallo, wir versuchen, den Woo Cart nach Hauptproduktkategorie zu sortieren und unter den Produkten in dieser Kategorie aufzulisten. Wie unten:

Radteile

  • Speichen 12
  • Reifen

Rahmen

  • Y Rahmen
  • X Rahmen
  • Z-Rahmen

Sitz

  • Sitz 1
  • Sitz 2

Wir haben es geschafft, nach Katzenreihenfolge angezeigt zu werden, aber es werden sie nicht in Hauptkatze -> Unterkatze bestellt

Wir haben den folgenden Code und versuchen, das Warenkorb-Array nach Katze und Sub-Katze zu bestellen

add_action( 'woocommerce_cart_loaded_from_session', function() {

    global $woocommerce;
    $products_in_cart = array();
    foreach ( $woocommerce->cart->cart_contents as $key => $item ) {
        $terms = wp_get_post_terms($item['data']->id, 'product_cat' );

        $products_in_cart[ $key ] = $terms[0]->name;
    }

    natsort( $products_in_cart );

    $cart_contents = array();
    foreach ( $products_in_cart as $cart_key => $product_title ) {
        $cart_contents[ $cart_key ] = $woocommerce->cart->cart_contents[ $cart_key ];

    }
    $woocommerce->cart->cart_contents = $cart_contents;

}, 100 );

Hat jemand bitte irgendwelche Ideen?

Antworten:


1

Ihr Code war korrekt, aber Sie hatten genau natsortdie Frage, welche Rückgabe 1 das Problem verursacht. Sie müssen die Kategorien auch nach Menüreihenfolge sortieren. Bitte überprüfen Sie, ob der folgende Code einwandfrei funktioniert.

add_action( 'woocommerce_cart_loaded_from_session', function() {

    global $woocommerce;
    $products_in_cart = array();
    foreach ( $woocommerce->cart->cart_contents as $key => $item ) {
        $terms = wp_get_post_terms($item['data']->id, 'product_cat' );
        $products_in_cart[ $key ] = $terms[0]->term_id;
    }
    // $categories = get_terms( 'product_cat', 'orderby=menu_order&hide_empty=1' );

    asort($products_in_cart);
    $cat_array = array();
    foreach ($products_in_cart as $key => $value) {
        $cat_array[$key] =get_term_by('id', $value, 'product_cat');
    }
    $mai_cat = [];
    $i=0;
    foreach ($cat_array as $parent_key => $parent_value) {
        if($parent_value->parent == 0)
        {
            $mai_cat[$parent_key] = $parent_value->term_id;
            foreach ($cat_array as $parent_key_sub => $parent_value_sub) {
                if($parent_value_sub->parent == $parent_value->term_id)
                {
                    $mai_cat[$parent_key_sub] = $parent_value_sub->term_id;
                }
            }   
        }
    }
    $cart_contents = array();
    foreach ( $mai_cat as $cart_key => $product_title ) {
        $cart_contents[ $cart_key ] = $woocommerce->cart->cart_contents[ $cart_key ];

    }
    $woocommerce->cart->cart_contents = $cart_contents;
}, 100 );

Getestet und funktioniert gut


Hallo danke dafür! Es funktioniert für Produkte mit Elternkatze und Subkatze, aber wir verwenden auch Verbundprodukte und zeigen sie nicht unter ihrer Katze an.
John Jones

Gibt es eine Möglichkeit, die Neuordnung / Sortierung für 3 Produktkategorien auszuschließen und sie dennoch auf normale Weise in den Warenkorb zu legen? Prost
John Jones

Haben Sie das Problem behoben?
raju_eww

Was meinst du mit "Verbundprodukt"? Verwenden Sie die Erweiterung "Composite Products" von Woocommerce?
ZecKa

Ja, wir verwenden Composite-Produkte neben normalen Produkten. Die Bestellung der normalen Produkte ist in Ordnung, aber die Reihenfolge der Composite-Produkte wird
John Jones
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.