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?

John Jones
quelle

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

raju_eww
quelle
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