Sortieren Sie Bestellartikel nach „Menüreihenfolge“ auf den Bearbeitungsseiten von WooCommerce-Bestellungen

Lesezeit: 4 Minuten

Sortieren Sie Bestellartikel nach „Menureihenfolge auf den Bearbeitungsseiten von WooCommerce Bestellungen
Amir Rajai Zadeh

Ich verwende diese Funktion, um Woocommerce-Order-Admin-Elemente nach Menüreihenfolge zu sortieren, aber Produkte mit Variablen werden nicht richtig angezeigt. Und wenn es mehrere Produkte mit Variablen in der Bestellung gibt, wird nur eines davon angezeigt.

Bearbeiten: Wir haben ein Problem mit mehreren Artikeln eines Produkts mit unterschiedlichen Attributen:

item1: Produkt A, Variable a, Attribut: rote Farbe, Menge 12

item2: Produkt A, Variable a, Attribut: grüne Farbe, Menge 18

nach sort zeigt es nur:

item1: Produkt A, Variable a, Attribut: rote Farbe, Menge 12

Mit anderen Worten, Produktartikel mit derselben Variations-ID haben ein Problem.

add_filter('woocommerce_order_get_items', 'custom_woocommerce_order_get_items', 10, 2);


function custom_woocommerce_order_get_items($items, $object)
       {
           //no need to reorder if less than 2 products
           if(count($items)   <    2)
               return $items;

       //create a list of products within the order
       $products   =   array();
       foreach($items  as  $key    =>  $item)
           {
               $products[  $item['product_id']   ] =   $key;
           }

       $sorted_items  =   array();

       global $post;

       $args   =   array(
                           'posts_per_page'    =>  -1,
                           'post_type'         =>  'product',
                           'orderby'           =>  'menu_order',
                           'order'             =>  'ASC',
                           'post__in'          =>  array_keys($products)
                           );
       $custom_query   =   new WP_Query($args);
       while($custom_query->have_posts())
           {
               $custom_query->the_post();
               $sorted_items[  $products[$post->ID]    ]   =   $items[ $products[$post->ID]    ];
           }

       //check for any left outside items
       foreach($items  as  $key    =>  $item)
           {
               if(isset($sorted_items[$key]))
                   $sorted_items[  $key   ]    =   $item;
           }

       return $sorted_items;

   }

  • Ich habe das Problem gelöst, bitte überprüfen Sie meine aktualisierte Antwort.

    – LoicTheAztec

    26. November 2017 um 21:15 Uhr

  • keine Lösung?

    – Amir Rajai Zadeh

    1. Dezember 2017 um 7:59 Uhr

Sortieren Sie Bestellartikel nach „Menureihenfolge auf den Bearbeitungsseiten von WooCommerce Bestellungen
LoicTheAztec

Aktualisiert: (um Variations-IDs einzuschließen, wenn es sich bei dem Produkt um ein variables Produkt handelt)

Die Hauptprobleme in Ihrem Code liegen in der Abfrage, wo Sie die auch abrufen müssen product_variation Beitragstyp und auch in der ersten Schleife, wo Sie die Variations-ID für variable Produkte erhalten müssen.

Auch dieser Code ist für WooCommerce 3+ veraltet, da Bestellpositionen jetzt a WC_Order_Item_Product Object und Sie müssen stattdessen die verfügbaren Methoden dieser Klasse verwenden.

Du brauchst die nicht global $post; Objekt, da es bereits als Argument in der Funktion steht.

Ich habe Ihren gesamten Code überprüft:

add_filter( 'woocommerce_order_get_items', 'filter_order_get_items', 10, 2 );
function filter_order_get_items( $items, $order ){

    // no need to reorder if less than 2 items
    if(count($items) < 2) return $items;

    $sorted_items = $products_items_ids = array();

    // Get the array of product/variation IDs with Item IDs within the order
    foreach( $items as $item_id => $item ){
        // Get the product ID (Added WC 3+ compatibility)
        $product_id = method_exists( $item, 'get_product_id' ) ? $item->get_product_id() : $item['product_id'];
        // Get the variation ID (Added WC 3+ compatibility)
        $variation_id = method_exists( $item, 'get_variation_id' ) ? $item->get_variation_id() : $item['variation_id'];
        if( $variation_id > 0 )
            $product_id = $variation_id;
        $products_items_ids[ $product_id ] = $item_id;
    }

    // The WP Query based on the product Ids from this order
    $query = new WP_Query( array(
       'posts_per_page'  =>  -1,
       'post_type'       =>  array( 'product', 'product_variation' ), // <== HERE MISSING
       'orderby'         =>  'menu_order',
       'order'           =>  'ASC',
       'post__in'        =>  array_keys( $products_items_ids ),
    ) );

    // Loop in the Query
    if( $query->have_posts() ){
        while( $query->have_posts() ): $query->the_post();
            // Get the post ID
            $post_id = $query->post->ID;

            // Get the corresponding item ID for the current product ID
            $item_id = $products_items_ids[ $post_id ];

            // Get the new sorted array of items
            $sorted_items[$item_id] = $items[$item_id];
        endwhile;
    }
    wp_reset_query();

    return $sorted_items;
}

Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) oder in eine beliebige Plugin-Datei eingefügt.

Getestet und funktioniert für alle Produkte, einschließlich Produktvarianten von WooCommerce v2.5.x bis v3.2+

  • Wir haben immer noch Probleme mit mehreren Artikeln eines Produkts mit unterschiedlichen Attributen: Produkt A, Variable a, Attribut: rote Farbe, Menge 12 Produkt A, Variable a, Attribut: grüne Farbe, Menge 18 Nach der Sortierung zeigt es nur: Produkt A, Variable a, Attribut: rote Farbe, Menge 12, danke @loictheaztec

    – Amir Rajai Zadeh

    26. November 2017 um 17:47 Uhr


  • Bitte testen und bestellen Sie mit zwei Artikeln eines Produkts einer Variablen mit zwei Attributen wie Farbe (Artikel 1: Rot Artikel 2: Grün). Tut mir leid für mein schlechtes Englisch.

    – Amir Rajai Zadeh

    26. November 2017 um 18:02 Uhr

  • @Amirrajaeizadeh Ok, sehe das Problem… Ich habe meinen Code aktualisiert und dieses Mal funktioniert es perfekt

    – LoicTheAztec

    26. November 2017 um 20:18 Uhr

  • Für mich funktioniert es auch für mehrere Variationen eines variablen Produkts, genau wie Sie es gesagt haben: siehe: i.stack.imgur.com/koQEE.png … Ich habe den Code, den ich habe, wieder eingefügt und das funktioniert für mich, also versuchen Sie es bitte noch einmal

    – LoicTheAztec

    27. November 2017 um 17:58 Uhr


  • Ist es besser, Sie kontaktieren mich im Skype-Chat, meine ID ist marsloic … Wenn ich eine Produktvariation mit any / any einstelle, ist das Hinzufügen zum Warenkorb nicht aktiviert … Wie erhalten Sie das als Bestellartikel?

    – LoicTheAztec

    27. November 2017 um 21:01 Uhr


1002970cookie-checkSortieren Sie Bestellartikel nach „Menüreihenfolge“ auf den Bearbeitungsseiten von WooCommerce-Bestellungen

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

Privacy policy