WordPressでサイト構築を行った際に
プラグインを使わずに検索部分を作ったのですが
その際に迷走して3時間程悩んだ事を書きたいと思います。
事の始まりは、カスタム投稿で制作された情報追加画面です。
一部、該当する事全てにチェックを入れて頂くために
1つの項目に5つのチェックボックスを設置して
情報を入力して頂くようにしました。
そのチェックボックスの情報を使って
検索ページでは、該当する物だけをピックアップするように
プログラムを組んだつもりでした…
実際、ある項目を除いては問題なく検索できていました。
ある項目とは…
1番目のチェックポックス項目。
それのみで検索をかけると、データベースが全件表示されてしまうのです。
2番目、3番目…と、それ以降は問題なくピックアップされるのに
1番目だけ『全件』表示…
WordPressのカスタム投稿の入力項目は”Advanced Custom Fields プラグイン“を使って設定をしています。
チェックボックスで入力された情報は、各チェックボックスの内容を『配列』で『詰めて』情報を持ちます。
例えば必須項目で『fruit』と言う項目のチェックボックスがあり
□みかん=”1” □りんご=”2” □バナナ=”3” □ぶどう=”4” □パイン=”5”
とします。
みかん、バナナ、パインにチェックを入れると
『fruit』と言う配列には fruit[0]=1、fruit[1]=3、fruit[2]=5
と言う状態で情報を持ちます。
検索をする際は、その配列の中に指定された内容が『含まれているかどうか』のチェックを部分一致の条件式『’compare’=>’LIKE’』で行えば良いのですが…
この状態で「みかん」だけで絞り込みを行うと…
全件該当となります。
なぜか…?
チェックボックスの基本として
何かしら項目にチェックが入っていれば”1”を
何もチェックを入れられていないのなら”0”を
それぞれ返すようで。
WORDPRESSではおなじみ『query_posts』で該当するデータを探す際に
array( ‘key’=>’1’, ‘value’=> $fruit, ‘compare’=>’LIKE’ );
とすれば
『$fruitのチェックボックで”1”がチェックされているか?』
となるはずと思っていたのですが
『チェックボックのどれかにチェックが入っているか?』
という条件として走ってしまい、必須項目であるチェックボックスのため
”全件該当データです”
となっていたようです。
こういった検索を行う場合、チェックボックに振る値は『文字列』にしましょう。