woocommerceの商品絞り込み結果が1つだけの時の挙動を制御する

タナビーの高梨です。

wordpressのプラグインであるwoocommerceはオンラインショップを簡単に構築できる優れものです。

しかしながら、デザイン的にも機能的にもかゆいところに手が届かない部分が多々あります。

そのためなのか、制御ができるようにフックが多数用意されていています。

それはそれで便利ではあるのですが、あまりにも数が多すぎるためやりたいことを実現するのにどのフックを使ってどうすればよいのか分からないことも多々あります。

商品絞り込み結果が1つだけの時の挙動が納得いかない

かゆいところに手が届かないという意味では、商品絞り込み結果が1つだけの時の挙動があまり納得いかないものになっています。

woocommerce標準の絞り込み機能は簡単に実装可能で、ブロックが準備されていてウィジェットやページ内に簡単に設置可能となっています。

属性での絞り込みやワード検索などに対応しており、簡易的なものであれば標準の絞り込みだけで十分に機能を果たすことができます。

ところが、余計なお世話というか、納得いかない挙動が1つあります。

それは、絞りこみや検索結果が1つだけだった時の挙動です。

通常複数の検索結果があった場合、結果はリスト表示されます。

ところが、結果が1つだけだった時は、自動的にその商品の詳細ページに飛ばされるのです。

どう考えてもその場合は1件だけのリストを出すのが自然だろう、と思うのですがどうなんでしょうか。

ユーザ目線からしても、リストが出ずにいきなり個別の詳細画面に飛ばされたら、何か不具合っぽく感じるような気がします。

フィルターフックがあったので簡単に実装できた

ということで色々ググっても情報が出ておらず、AI様に聞いても要領を得ずという状況。

仕方ないのでソースを追ってようやくフックを見つけました。

しかも超シンプル!

ということで、woocommerceの絞り込み検索結果の挙動に納得がいかない場合は、以下のフィルターフックで引っかけて書き換えてしまいましょう。

function searchResultSingleProduct ($args) {

	return false;
	
}
add_filter('woocommerce_redirect_single_search_result', 'searchResultSingleProduct');

woocommerce_redirect_single_search_resultは、絞り込み結果が1つだった場合に発火するフィルターフックです。

wc-template-functions.phpで定義されています。

これがデフォルトのtrueで返ると商品詳細ページにリダイレクトされる仕組みになっているので、ここをfalseで返るようにするだけで無事解決です。

まとめ

まとめイメージ

ここをフィルターフックにするということは、製作者もリスト表示する必要性を認識していることにほかなりません。

どうせフィルターフックにするのであれば、デフォルトをfalseにしておいてくれれば使い勝手が良いのにと思いますが、フックになっていただけマシだと思うことにしました。

ところでwoocommerceのソースにapply_filtersとadd_actionをgrepかけると、合計で3000個以上引っかかってきますので、相当奥の深いフックとなっており、簡単には全てを理解するのが困難な量だと分かります。

一応、公式サイトにリファレンス的なものがあったり、主要なものをまとめてくれているサイトがあったりしますが、逆引き的なものが欲しいところです。

AI様に頑張ってもらいたいところですが、今のところあまり期待できるものとはなっていません。

微力ながら気付いたものを少しずつアップしていければと思った次第です。