###前提・実現したいこと
よろしくお願いいたします。
http://kotori-blog.com/wordpress/refinement_search/
上記ページの「カスタムフィールドで絞り込むチェックボックス」を参考に、絞り込み検索の設置を試みています。
絞り込み方法は投稿ページにカスタムフィールドを利用し、検索フォームでチェックボックスを利用しています。
検索フォームでチェックボックスを利用するのは、どれか一つでも条件が当てはまれば投稿を表示させたいからです。
チェックボックスに見出しを付けたいため、タグではなくカスタムフィールドを利用しています。
例:
関西
□大阪 □兵庫 □京都 □奈良 □滋賀 □和歌山
四国
□徳島 □香川 □高知 □愛媛
のような形です。
###発生している問題・エラーメッセージ
エラー1:カスタムフィールドでチェックボックスを使用した場合は、すべて「該当なし」と表示されます。 エラー2:カスタムフィールドでテキストを使用した場合は、カスタムフィールドのテキストボックスに一番初めに記入した文言と同じものに、検索フォームのチェックが入った場合のみ表示されます。
###該当のソースコード
search.php
<?php $s = $_GET['s']; $kodawari = $_GET['kodawari']; //meta_query用 if($kodawari){ foreach($kodawari as $val){ $metaquerysp[] = array( 'key'=>'kodawari', 'value'=> $val, ); } } $metaquerysp['relation'] = 'OR'; ?> <div>検索条件</div> <?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?> <?php if (is_array($kodawari)) { ?>カスタムフィールド:<?php if (is_array($kodawari)) { foreach($kodawari as $val){ if ($val === end($kodawari)) { echo $val; }else{ echo $val.", "; } } } } ?> <div>検索結果</div> <?php query_posts( array( 'meta_query' => $metaquerysp, ) ); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div><?php the_title(); ?></div> <div><?php the_content(); ?></div> <?php endwhile; else : ?> <div>該当なし</div> <?php endif; wp_reset_query(); ?>
検索画面
<form method="get" id="searchform" action="<?php bloginfo('url'); ?>"> <label for="s" class="assistive-text">検索</label> <input type="text" name="s" id="s" placeholder="検索" /> <div>カスタムフィールド</div> <label><input type="checkbox" name="kodawari[]" value="大阪">大阪</label><br> <label><input type="checkbox" name="kodawari[]" value="奈良">奈良</label><br> <label><input type="checkbox" name="kodawari[]" value="滋賀">滋賀</label><br> <label><input type="checkbox" name="kodawari[]" value="和歌山">和歌山</label> <input type="submit" value="検索" /> </form>
###試したこと
<?php query_posts( array( 'meta_query' => $metaquerysp, 's' => $s, ) ); ?>上記コードでは、テキストボックスでも検索できなかったので、「's' => $s,」を削除したところ最初に記載した一件目のみ表示が可能となりました。
上手く説明できているか分からないのですが
よろしくお願いします。
インストールプラグイン
・Search Everything
・カスタムフィールドテンプレート
miz様からアドバイスをいただき、var_dump()を使ったところ下記表示となりました。
array(2) { [0]=> array(2) { ["key"]=> string(8) "kodawari" ["value"]=> string(9) "和歌山" } ["relation"]=> string(2) "OR" } string(0) ""
回答1件
あなたの回答
tips
プレビュー