Wordpressの検索機能について。
最近作ったものをテストで動かしながら思ったのが。
チェックボックスに1つもチェックをいれなかったら
絞り込まずに全部表示されるはず。
ユーザー心理として当たり前だと思っていたことが
システムではそう簡単にはいきません。
システムとしてはあくまでも「絞り込み/検索」であって
ユーザーが入力した条件にあったものを表示するというもの。
何にも入力しなければ何にも一致しないので
表示するものは何もありませんよ、という当たり前の結果が返ってきます。
それを
絞り込みの入力がなければ
その項目はすべて表示する
という扱いにするまでの過程です。
いたって普通の使い方です。
しかしながら、一つでも指定しない項目があると
システム上ではこうなっています。
つまりは何も該当せず、何も表示されない…。
開発側ではなく素直な気持ちで検索ボックスと向き合ったとき、
何も入力しない理由は
「色にこだわりはない!とりあえず全部だしてくれ」だということです。
なので正解は、選択していないときは
全部該当!!
絞り込みで空で送信された場合は、
検索結果画面で、すべての条件を自動で挿入する。
絞り込みがある場合はその絞り込みのまま動作させる、、ということですね。
結果的にこうなりました。
<?php /* 検索引数の取得 */ $s = $_GET['s']; $s_fruits = $_GET['s_fruits']; /* 条件取得 */ if( !empty($s_fruits) ) { $fruit_selected = array('taxonomy'=>'fruits','terms'=>$s_fruits,'field'=>'slug','operator'=>'IN');}; query_posts( array( 'paged' => $paged , 'posts_per_page' => 12, 'post_type' =>'post', 's' => $s, 'tax_query' => array( $fruit_selected, 'relation' => 'AND' ) ) ); ?>
これが通常通り下記のように、
'tax_query'の中にタクソノミーを書いてしまっていると
ターム指定がないときに、
「条件に一致するものがありませんよ!そもそも条件がないから!」
となります。
<? /* 間違い */ $s_fruits = $_GET['s_fruits']; query_posts( array( 'paged' => $paged , 'posts_per_page' => 12, 'post_type' =>'post', 's' => $s, 'tax_query' => array( array( 'taxonomy'=>'fruits', 'terms'=>$s_fruits, 'field'=>'slug', 'operator'=>'IN' ), 'relation' => 'AND' ) ) ); ?>
詳しくはワードプレス便利帳にて公開中です。
よろしければご参考までに。
もっとスマートな、システムに負担をかけないコーディング方法があれば大歓迎です。