取扱い注意な『チェックボックス』

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”がチェックされているか?』
となるはずと思っていたのですが

『チェックボックのどれかにチェックが入っているか?』
という条件として走ってしまい、必須項目であるチェックボックスのため
”全件該当データです”
となっていたようです。

こういった検索を行う場合、チェックボックに振る値は『文字列』にしましょう

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です