Filtern Sie Bestellungen nach Produkt-Post-Typ auf der Bestelllistenseite des WooCommerce-Adminbereichs

Lesezeit: 3 Minuten

Filtern Sie Bestellungen nach Produkt Post Typ auf der Bestelllistenseite des WooCommerce Adminbereichs
tg910

Ich bin neu bei WooCommerce und möchte die Seite mit der Bestellliste für Administratoren anpassen. Also habe ich im Grunde einen neuen Produkttyp erstellt. Jetzt habe ich auch die Einschränkung vorgenommen, dass der Kunde das Produkt meines benutzerdefinierten Produkttyps oder das Produkt des einfachen Produkttyps gleichzeitig kaufen kann.

Jetzt möchte ich auf der Admin-Auflistungsseite eine Bestellung anzeigen, die das Produkt eines einfachen Produkttyps enthält. Wie kann ich das tun?

Ich habe viel gesucht und ein Plugin gefunden, das einen Filter hat, um die Bestellung nach Produkt und nicht nach Produkttyp anzuzeigen. Während ich dieses Plugin studierte, erfuhr ich, dass ich dies möglicherweise tun kann posts_where Aktion. Aber ich habe keine richtige Vorstellung.

  • Was meinst du mit “Admin-Bestelllistenseite”? Welche “Admin”-Seite?

    – Jimmy Adaro

    14. Mai 2019 um 14:01 Uhr

  • Ich meine Seite, die alle Bestellungen im Backend anzeigt

    – tg910

    14. Mai 2019 um 14:17 Uhr

  • “Befehle” in was? Ich verstehe es nicht.

    – Jimmy Adaro

    14. Mai 2019 um 14:20 Uhr

  • Ich meine, ich möchte filtern, dass die Reihenfolge angezeigt wird, in der alle Produkte den gleichen Produkttyp haben

    – tg910

    14. Mai 2019 um 14:23 Uhr

Filtern Sie Bestellungen nach Produkt Post Typ auf der Bestelllistenseite des WooCommerce Adminbereichs
LoicTheAztec

Die folgenden Funktionen fügen der Admin-Bestellliste ein zusätzliches Filter-Dropdown-Menü hinzu, mit dem Sie Bestellungen basierend auf dem Produktposttyp der Bestellartikel filtern können:

add_action( 'restrict_manage_posts', 'admin_shop_order_by_product_type_filter' );
function admin_shop_order_by_product_type_filter(){
    global $pagenow, $post_type;

    if( 'shop_order' === $post_type && 'edit.php' === $pagenow ) {
        $domain     = 'woocommerce';
        $filter_id  = 'filter_product_type';
        $current    = isset($_GET[$filter_id])? $_GET[$filter_id] : '';
        $query_args = ['taxonomy' => 'product_type', 'fields' => 'names', 'orderby' => 'order'];

        echo '<select name="'.$filter_id.'">
        <option value="">' . __('Filter by Product post type', $domain) . '</option>';

        foreach ( get_terms($query_args) as $term_name ) {
            printf( '<option value="%s"%s>%s</option>', $term_name,
                $term_name === $current ? '" selected="selected"' : '', ucfirst($term_name) );
        }
        echo '</select>';
    }
}

add_action( 'pre_get_posts', 'process_admin_shop_order_product_type_filter' );
function process_admin_shop_order_product_type_filter( $query ) {
    global $pagenow, $post_type, $wpdb;

    $filter_id = 'filter_product_type';

    if ( $query->is_admin && 'edit.php' === $pagenow && 'shop_order' === $post_type
         && isset( $_GET[$filter_id] ) && $_GET[$filter_id] != '' ) {

        $order_ids = $wpdb->get_col( "
            SELECT DISTINCT o.ID
            FROM {$wpdb->prefix}posts o
            INNER JOIN {$wpdb->prefix}woocommerce_order_items oi
                ON oi.order_id = o.ID
            INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim
                ON oi.order_item_id = oim.order_item_id
            INNER JOIN {$wpdb->prefix}term_relationships tr
                ON oim.meta_value = tr.object_id
            INNER JOIN {$wpdb->prefix}term_taxonomy tt
                ON tr.term_taxonomy_id = tt.term_taxonomy_id
            INNER JOIN {$wpdb->prefix}terms t
                ON tt.term_id = t.term_id
            WHERE o.post_type="$post_type"
            AND oim.meta_key = '_product_id'
            AND tt.taxonomy = 'product_type'
            AND t.name="{$_GET[$filter_id]}"
        ");

        $query->set( 'post__in', $order_ids ); // Set the new "meta query"

        $query->set( 'posts_per_page', 25 ); // Set "posts per page"

        $query->set( 'paged', ( get_query_var('paged') ? get_query_var('paged') : 1 ) ); // Set "paged"
    }
}

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

  • Dieser Code funktioniert perfekt zum Filtern von Bestellungen! Aber die Reihenfolge zählt für jede Bestellung ist falsch. Irgendwelche Gedanken dazu?

    – Vidish Purohit

    18. September 2020 um 7:06 Uhr

917650cookie-checkFiltern Sie Bestellungen nach Produkt-Post-Typ auf der Bestelllistenseite des WooCommerce-Adminbereichs

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

Privacy policy