WooCommerce の注文検索でのデフォルト仕様
注文を検索したい時に、WooCommerce 注文一覧からフリーワードで検索が出来るのですが、もちろん、全て情報から検索するわけではなく、特定の部分からキーワード検索するようになっています。まずは、そのデフォルトの仕様を確認するために、そこで使われている関数を知る必要があります。
その関数は search_orders です。
この関数を読んでいけば分かるのですが、検索対象となっている項目は以下です。
- _billing_address_index(注文者住所)
- _shipping_address_index(発送先住所)
- _billing_last_name(注文者の姓)
- _billing_email(注文者のメールアドレス)
あと、数字のみの場合は注文 ID で検索が可能です。
もちろん、部分検索に対応しているので郵便番号などで検索する事も可能です。
ただ、一致しないといけないので、その点は注意が必要です。例えば、郵便番号で検索したくて、「123-4567」で検索したとしても、登録が「1234567(ハイフンなし)」だった場合は検索結果に出てきません。
ちなみに住所情報には注文者と発送者の姓名が入っているので、姓名で検索することは可能ですが、半角スペースで区切られているので片方だけでの絞り込みとなります。
検索項目を追加するフィルター
今回利用するフィルターは woocommerce_shop_order_search_fields です。
先に説明した4項目が登録されています。
基本的に検索項目は注文メタデータとなります。なので、カスタマイズをゴリゴリにして検索対応を広げる場合にはまず検索する対象の情報を注文メタの中に入れ込まないといけません。これは別途注文作成時などのフックを利用して登録するようにしてください。
ここまで書いて今気がついたのですが、この関数、現時点で HPOS に対応していないですね。。。
なので、将来的に修正が必要かもです。
例えば、「注文の合計金額」と「注文者の電話番号」でも検索をできるようにしたい場合は以下のように対応します。
add_filter( 'woocommerce_shop_order_search_fields', 'add_search_fields' );
function add_search_fields( $search_fields ){
$search_fields[] = '_order_total';
$search_fields[] = '_billing_phone';
return $search_fields;
}
REST API にも対応
ちなみに REST API の List all orders のフリーワード検索にも対応しています。
多分、こちらの開発をしていると外部から登録されている注文データの検索をしたい場合などに非常に使えるのではないかなと思っています。ちなみに私もこれでよく使っています。