複数の注文ステータスで WooCommerce 注文をフィルタリングする方法は?

公開: 2019-02-16

最近、お客様の 1 人から、管理画面の WooCommerce 注文ページについて次の質問がありました。注文バックエンドで複数のステータスを選択する方法はありますか?

WooCommerce ストアの所有者は定期的にこれを行う必要はないかもしれませんが、一部のユーザーにとっては間違いなく役立つでしょう。

この投稿では、さまざまなステータスの WooCommerce 注文を 1 つのビューに表示する方法について説明します。 この投稿の後半では、すべての注文が表示されているときに、1 つまたは複数のステータスを除外する方法も確認します。

WooCommerce のデフォルトの動作では、すべての注文を表示するか、いずれかのステータスの注文を表示できます。 ただし、保留中の注文や返金済みの注文など、異なるステータスの注文をまとめて表示することはできません。 または、すべてのビューでステータスの注文を除外することはできません。

WooCommerce Orders in Admin
デフォルトの WooCommerce 注文ページ ビュー

デフォルトの注文ステータスとは別に、カスタムの注文ステータスを追加しました: 配送済み 。 これは、カスタム オーダー ステータス プラグインを使用して追加され、フィルタリングがデフォルト ステータスとともにカスタム オーダー ステータスでも機能することを確認するために追加されています。

パート 1: WooCommerce 注文をフィルタリングして、複数のステータスの注文を 1 つのビューに表示する

これに対する解決策を探す方法は複数あります。 プラグインを使用するか、コード スニペットを使用して注文ステータスの複数選択ドロップダウンを追加することにより、可能性があります。 または大まかな方法​​として、必要なステータスを URL に追加するだけです。

それは間違いなく最善の方法ではありませんが、うまくいきます。 後でこの投稿に戻って更新し、WooCommerce 注文ステータスの複数選択ドロップダウンを含めることができます.

まずコードを見てみましょう。

 /**
 *追加のwoocommerceステータスを含めるためのフィルターを処理します
 *
 * @param array $query_vars クエリ変数。
 * @return 配列
 */
関数 ts_woocommerce_include_order_status( $query_vars ) {
  グローバル $typenow;

  /**
   * 他のプラグインで他の注文タイプを追加できるため、「shop_order」の代わりに wc_get_order_types() を使用
   */
  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 = expand( ',', $_GET['include_status'] );
      $q_post_status[] = $query_vars['post_status'];
      $query_vars['post_status'] = array_merge( $q_post_status, $include_status );
    }
  }
  $query_vars を返します。
}
add_filter( 'リクエスト', 'ts_woocommerce_include_order_status', 20, 1 );

上記のスニペットでいくつかのことを行っています。

まず、WordPress のリクエスト フィルターに関数をアタッチします。

コードを WooCommerce 注文ページに対してのみ実行する必要があるため、wc_get_order_types() 関数から返される配列に$typenow変数が存在することを確認します。 この場合、$typenow はshop_orderに設定されます。 WooCommerce によって作成された注文の post_type です。

include_statusは、表示したい他の注文ステータスを渡す必要がある GET 変数です。 複数の注文ステータスをカンマ区切りで渡すことができます。 最初に、表示したい 1 つの注文ステータスで注文をフィルタリングする必要があります。 指値注文でフィルタリングしたとしましょう。

WooCommerce Orders with Pending status
保留中の WooCommerce 注文

返金済みの注文と保留中の注文を確認したい場合、それは不可能です。 ただし、上記のコード スニペットを子テーマの functions.php に追加し、ブラウザで注文ページの URL を以下のリンクに変更すると:

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

保留中の注文と返金済みの注文が表示されます。

WooCommerce orders with status as Pending & Refunded being shown
ステータスが Pending & Refunded の WooCommerce 注文が表示されている

include_status パラメータでは、コンマで区切られた複数の注文ステータスを渡すこともできます。 したがって、保留中、返金済み、および配達済みの注文を表示したい場合は、以下のように URL を変更してください。

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

Delivered は、WooCommerce のテスト インストールに追加したカスタム ステータスであることに注意してください。 スラッグはトイレ配信です。 ステータスはカスタム オーダー ステータス プラグインで追加されます。

上記のリンクを開くと、次の 3 つのステータスの注文が表示されます。

WooCommerce orders with status as Pending, Refunded & Delivered being shown
ステータスが保留中、返金済み、配達済みの WooCommerce 注文が表示されている

URL のコンマは、URL エンコーディングのために %2C に置き換えられます。

パート 2: WooCommerce 注文をフィルタリングして、[すべて] ビューで 1 つ以上のステータスの注文を非表示にする

デフォルトでは、注文ページにすべてのステータスの WooCommerce 注文が表示されるビューが表示されます。

WooCommerce Orders in Admin

以下のコード スニペットを作成して、URL で変数exclude_statusを渡すことができるようにしました。 exclude_status 変数では、[すべて] ビューの [注文] ページに表示されないようにするステータスのスラッグを渡すことができます。 コードは次のとおりです。

 /**
 * すべての注文ビューから woocommerce ステータスを除外するためのフィルターを処理します
 *
 * @param array $query_vars クエリ変数。
 * @return 配列
 */
関数 ts_woocommerce_exclude_order_status( $query_vars ) {
  グローバル $typenow;

  /**
   * 他のプラグインで他の注文タイプを追加できるため、「shop_order」の代わりに wc_get_order_types() を使用
   */
  if ( in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ), true ) ) {
    if ( isset( $_GET['exclude_status'] ) && '' != $_GET['exclude_status']
       && isset( $query_vars['post_status'] ) ) {
      $exclude_status = expand( ',', $_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 を返します。
}
add_filter( 'リクエスト', 'ts_woocommerce_exclude_order_status', 20, 1 );

上記のコードを子テーマの functions.php ファイルに追加し、WooCommerce 注文ページの URL を以下のように変更すると:

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

次に、ステータスが保留中の注文は、すべての注文のデフォルト ビューに表示されません。

Excludes Pending orders from being displayed from all orders view
すべての注文ビューから未決注文が表示されないようにします

除外する複数の注文ステータスを指定することもできます。 コンマで区切る必要があります。 上記の例を拡張して、保留中および配達済みの注文を [すべて] ビューから非表示にする場合は、注文ページの URL を次のように変更できます。

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

注文ページでは、すべてのビューに保留中および配達済みの注文が表示されなくなります。

Excludes Pending & Delivered orders from being displayed from all orders view
すべての注文ビューから保留中および配達済みの注文が表示されないようにします

以下は、デフォルトの WooCommerce 注文ステータスとそれぞれのスラッグのリファレンスです。

  • 保留中の支払い – wc-pending
  • 失敗 – wc-failed
  • 処理 – wc-処理
  • 完了 – wc-完了
  • 保留中 – wc-on-hold
  • キャンセル済み – wc-cancelled
  • 返金済み – wc-refunded

URL に注文ステータスを直接追加することは、最善の方法ではありません。 しかし、この投稿の目的は、目的を達成する方法を示すことです。

WooCommerce で注文ステータスによって注文をフィルタリングする他の方法を試しましたか? 私はそれらを知りたいです。