Wie filtere ich WooCommerce-Bestellungen nach mehreren Bestellstatus?

Veröffentlicht: 2019-02-16

Einer unserer Kunden hat uns kürzlich diese Frage für seine WooCommerce-Bestellseite im Adminbereich gestellt: Gibt es eine Möglichkeit, mehrere Status im Bestell-Backend auszuwählen?

Obwohl WooCommerce-Ladenbesitzer dies möglicherweise nicht regelmäßig tun müssen, würde dies einigen von ihnen definitiv helfen.

Dieser Beitrag erklärt, wie man WooCommerce-Bestellungen mit unterschiedlichen Status in einer Ansicht anzeigt. In der 2. Hälfte dieses Beitrags werden wir auch prüfen, wie Sie einen oder mehrere Status ausschließen können, wenn alle Bestellungen angezeigt werden.

Das Standardverhalten von WooCommerce ist, dass Sie entweder Alle Bestellungen oder Bestellungen für einen beliebigen Status anzeigen können. Sie können jedoch Bestellungen mit unterschiedlichem Status nicht zusammen anzeigen, z. B. ausstehende und erstattete Bestellungen. Oder Sie können Bestellungen eines Status in der Ansicht Alle nicht ausschließen.

WooCommerce Orders in Admin
Standardseitenansicht für WooCommerce-Bestellungen

Abgesehen von den Standard-Bestellstatus habe ich einen benutzerdefinierten Bestellstatus hinzugefügt: Geliefert . Dies wurde mithilfe des Plugins für den benutzerdefinierten Bestellstatus hinzugefügt und wird hinzugefügt, um zu überprüfen, ob die Filterung auch mit benutzerdefinierten Bestellstatus zusammen mit den Standardstatus funktionieren würde.

Teil 1: WooCommerce-Bestellungen filtern, um Bestellungen mit mehreren Status in einer Ansicht anzuzeigen

Es gibt mehrere Möglichkeiten, nach einer Lösung dafür zu suchen. Dies kann entweder über ein Plugin oder durch Hinzufügen eines Dropdown-Menüs mit Mehrfachauswahl des Bestellstatus mit einem Code-Snippet erfolgen. Oder fügen Sie einfach den gewünschten Status in die URL ein.

Es ist definitiv nicht der beste Weg, aber es funktioniert. Möglicherweise komme ich später auf diesen Beitrag zurück und aktualisiere ihn, um ein Dropdown-Menü mit Mehrfachauswahl von WooCommerce-Bestellstatus aufzunehmen.

Schauen wir uns zuerst den Code an.

 /**
 * Behandeln Sie Filter zum Einschließen zusätzlicher Woocommerce-Status
 *
 * @param-Array $query_vars Abfrage-Variablen.
 * @return-Array
 */
Funktion ts_woocommerce_include_order_status( $query_vars ) {
  global $typenow;

  /**
   * Verwendung von wc_get_order_types() anstelle von 'shop_order', da andere Bestelltypen von anderen Plugins hinzugefügt werden könnten
   */
  if ( in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ), ​​true ) ) {
    if ( isset( $_GET['include_status'] ) && '' != $_GET['include_status']
       && isset( $query_vars['post_status'] ) ) {
      $include_status = explode( ',', $_GET['include_status'] );
      $q_post_status[] = $query_vars['post_status'];
      $query_vars['post_status'] = array_merge( $q_post_status, $include_status );
    }
  }
  $query_vars zurückgeben;
}
add_filter( 'request', 'ts_woocommerce_include_order_status', 20, 1 );

Wir tun ein paar Dinge im obigen Snippet.

Zunächst hängen wir unsere Funktion an den Anfragefilter von WordPress an.

Da wir möchten, dass unser Code nur für die WooCommerce-Bestellseite ausgeführt wird, tun wir dies, indem wir sicherstellen, dass die $typow- Variable in dem Array vorhanden ist, das von der Funktion wc_get_order_types() zurückgegeben wird. In diesem Fall wird $typenow auf shop_order gesetzt. Das ist der post_type der Bestellungen, die von WooCommerce erstellt werden.

include_status ist die GET-Variable, in der Sie andere Bestellstatus übergeben sollten, die angezeigt werden sollen. Mehrere Bestellstatus können durch Komma getrennt übergeben werden. Sie sollten die Bestellung zuerst nach einem beliebigen Bestellstatus filtern, den Sie sehen möchten. Angenommen, Sie haben nach ausstehenden Bestellungen gefiltert.

WooCommerce Orders with Pending status
WooCommerce-Bestellungen mit dem Status „Ausstehend“.

Wenn Sie die erstatteten Bestellungen zusammen mit den ausstehenden Bestellungen sehen möchten, ist dies nicht möglich. Wenn Sie jedoch das obige Code-Snippet in die functions.php Ihres untergeordneten Themas einfügen und dann die URL der Bestellseite in Ihrem Browser auf den folgenden Link ändern:

<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-refunded

Sie werden sehen, dass sowohl ausstehende als auch erstattete Bestellungen angezeigt werden.

WooCommerce orders with status as Pending & Refunded being shown
WooCommerce-Bestellungen mit dem Status „Ausstehend und erstattet“ werden angezeigt

Im Parameter include_status können Sie auch mehrere Bestellstatus durch Kommas getrennt übergeben. Wenn Sie also ausstehende, erstattete und gelieferte Bestellungen anzeigen möchten, können Sie dies tun, indem Sie die URL wie folgt ändern:

<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-refunded,wc-delivered

Es ist wichtig zu beachten, dass „Geliefert“ ein benutzerdefinierter Status ist, den ich in meiner Test-WooCommerce-Installation hinzugefügt habe. Seine Schnecke wird wc-geliefert. Der Status wird mit dem Custom Order Status Plugin hinzugefügt.

Wenn Sie den obigen Link öffnen, sehen Sie die Bestellungen mit diesen 3 Status:

WooCommerce orders with status as Pending, Refunded & Delivered being shown
WooCommerce-Bestellungen mit dem Status „Ausstehend“, „Erstattet“ und „Geliefert“ werden angezeigt

Das Komma in der URL wird aufgrund der URL-Codierung durch %2C ersetzt.

Teil 2: WooCommerce-Bestellungen filtern, um Bestellungen mit einem oder mehreren Status in der Ansicht „Alle“ auszublenden

Standardmäßig wird Ihnen eine Ansicht angezeigt, in der WooCommerce-Bestellungen aller Status auf der Seite Bestellungen angezeigt werden.

WooCommerce Orders in Admin

Ich habe das folgende Code-Snippet erstellt, mit dem Sie eine Variable in der URL „exclude_status“ übergeben können . In der Variable exclude_status können Sie den Slug des Status übergeben, den Sie von der Anzeige auf der Seite „Bestellungen“ in der Ansicht „Alle“ ausschließen möchten. Hier ist der Code:

 /**
 * Behandeln Sie Filter zum Ausschließen von Woocommerce-Status aus der Ansicht Alle Bestellungen
 *
 * @param-Array $query_vars Abfrage-Variablen.
 * @return-Array
 */
Funktion ts_woocommerce_exclude_order_status( $query_vars ) {
  global $typenow;

  /**
   * Verwendung von wc_get_order_types() anstelle von 'shop_order', da andere Bestelltypen von anderen Plugins hinzugefügt werden könnten
   */
  if ( in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ), ​​true ) ) {
    if ( isset( $_GET['ausschließen_status'] ) && '' != $_GET['ausschließen_status']
       && isset( $query_vars['post_status'] ) ) {
      $exclude_status = explode( ',', $_GET['exclude_status'] );
      foreach ( $exclude_status as $key => $value ) {
        if ( ( $key = array_search( $value, $query_vars['post_status'] ) ) !== false) {
          unset( $query_vars['post_status'][$key] );
        }
      }
    }
  }
  $query_vars zurückgeben;
}
add_filter( 'request', 'ts_woocommerce_exclude_order_status', 20, 1 );

Wenn der obige Code in der Datei functions.php deines Child-Themes hinzugefügt wird und du dann die URL deiner WooCommerce-Bestellseite in die folgende änderst:

<your_store_url>/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-pending

Dann werden die Bestellungen mit dem Status Pending nicht in der Standardansicht Alle Bestellungen angezeigt:

Excludes Pending orders from being displayed from all orders view
Schließt ausstehende Bestellungen von der Anzeige in der Ansicht „Alle Bestellungen“ aus

Sie können auch mehrere Bestellstatus angeben, die ausgeschlossen werden sollen. Sie müssen durch Komma getrennt werden. Wenn Sie das obige Beispiel erweitern und ausstehende und gelieferte Bestellungen aus der Ansicht „Alle“ ausblenden möchten, können Sie die URL Ihrer Bestellseite ändern in:

<your_store_url>/woocommerce/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-pending,wc-delivered

Die Seite „Bestellungen“ zeigt in der Ansicht „Alle“ keine ausstehenden und gelieferten Bestellungen mehr an:

Excludes Pending & Delivered orders from being displayed from all orders view
Schließt ausstehende und gelieferte Bestellungen aus der Ansicht „Alle Bestellungen“ aus

Hier ist eine Referenz der standardmäßigen WooCommerce-Bestellstatus und ihrer jeweiligen Slugs.

  • Ausstehende Zahlung – wc-pending
  • Fehlgeschlagen – wc-fehlgeschlagen
  • Verarbeitung – WC-Verarbeitung
  • Abgeschlossen – wc-abgeschlossen
  • Warteschleife – WC in Warteschleife
  • Storniert – wc-storniert
  • Erstattet – wc-erstattet

Das direkte Hinzufügen des Bestellstatus in der URL ist nicht der beste Ansatz. Aber die Idee dieses Posts ist es zu zeigen, wie das Ziel erreicht werden kann.

Haben Sie einen anderen Ansatz zum Filtern von Bestellungen nach Bestellstatus in WooCommerce ausprobiert? Ich würde sie gerne kennenlernen.