オリジナルテーマを作成しWordPress内で設定したカスタム投稿のカスタムタクソノミー検索を行いたいのですが、いまいち結果が出ずご相談させてください。
住宅ポータルサイトを作成し一つのカスタム投稿内に複数のタクソノミーを設定してます。
●例:【住宅情報】と言うカスタム投稿内に
「新宿区」「足立区」「板橋区」などのタクソノミーAと
「家賃10万円以上」「家賃15万円以上」「家賃20万円以上」のタクソノミーBを設定。
住宅情報を更新する際は、それぞれ条件に当てはまるタクソノミーからタームを選択し、「地区」「家賃」と言ったリンクから対応したタクソノミーの一覧情報(記事)のみ表示させるようにしてます。
●質問
チェックボックスから複数の条件をヒットさせる方法を教えてください。
サイドバー内に検索部分を設置し「新宿区」「家賃20万円以上」をチェック「検索する」ボタンを押して、2つの条件にヒットしたもののみ検索結果一覧に表示させたいです。
●現状
地域としてタクソノミー設定した area_all を自動ですべて表示させるようにしてます。ここに他のタクソノミーを表示させ、チェックボックスを付けた検索を行いたいです。
【searchform.php】
<form method="get" id="search-form" action="<?php echo esc_url(home_url('/')); ?>"> <input type="hidden" name="post_type" value="area"> <input type="hidden" class="field" name="s"> <?php $taxonomy_name = 'area_all'; $args = array( 'orderby' => 'description', 'hide_empty' => false ); $taxonomys = get_terms($taxonomy_name,$args); if(!is_wp_error($taxonomys) && count($taxonomys)): foreach($taxonomys as $taxonomy): $tax_posts = get_posts(array('post_type' => 'area', 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); if($tax_posts): ?> <label class="search-label-<?php echo $taxonomy->slug; ?>"><input type="checkbox" name="cat_area[]" value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></label> <?php endif; endforeach; endif; ?> <input type="submit" value="検索"> </form>
検索結果の
【search.php】
<?php //絞り込みの値を取得 $s = $_GET['s']; $post_type = $_GET['post_type']; $cat_area = $_GET['cat_area']; $post_tag = $_GET['post_tag']; //絞り込みの値をクエリ用に代入 if( !empty($cat_area) ) { $cat_area_selected = array('taxonomy'=>'area_all','terms'=>$cat_area,'field'=>'slug','operator'=>'IN'); } if( !empty($post_tag) ) { //タグの場合 $post_tag_selected = array('taxonomy'=>'post_tag','terms'=>$post_tag,'field'=>'slug','operator'=>'IN'); } //タクソノミー絞り込みの場合はクエリを指定 if( !empty($cat_area) || !empty($post_tag) ) { query_posts( array( 'paged' => $paged, 'post_type' => $post_type, 's' => $s, 'tax_query' => array( 'relation' => 'AND', $cat_area_selected, $post_tag_selected ) ) ); } ?> <?php if( !empty($cat_area) || !empty($post_tag) ) { ?> <div class="refine-by">‘ <?php if(is_array($cat_area)) { foreach($cat_area as $val){ echo get_term_by('slug',$val,"area_all")->name." "; } } if(is_array($post_tag)) { //タグの場合 foreach($post_tag as $val){ echo get_term_by('slug',$val,"post_tag")->name." "; } } ?> ’ の検索結果</div> <?php } else { echo '<div class="refine-by">‘'.$s.'’ の検索結果</div>'; } ?> <ul> <?php if( have_posts() ): while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php endwhile; else: endif; ?> </ul> <?php if (isset($_GET['s']) && empty($_GET['s'])) { ?> <p>検索条件が入力されていません。</p> <?php } else { ?> <?php if(have_posts()): ?> <?php while(have_posts()): the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <?php else : ?> <p><?php echo $search_query; ?> に一致する情報は見つかりませんでした。</p> <?php endif; ?> <?php } ?> --------------------------------- <?php if( !empty($cat_area) || !empty($post_tag) ) { ?> <h2>絞り込み検索結果</h2> <ul> <?php if( have_posts() ): while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php endwhile; else: endif; ?> </ul> <?php } else{ ?> <h2>キーワード検索結果</h2> <ul> <?php if( have_posts() ): while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php endwhile; else: endif; ?> </ul> <?php } ?>
■補足
上記のソースで検索フォームに「 area_all 」タクソノミーで設定したタームは表示されており、検索結果で絞り込みは出来ております。ただ「 area_all 」のタームしか表示されないので、別のタクソノミーを追加表示し、そのタームも検索できるようにしたいのが最終形態です。
よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/16 06:07
2018/04/16 07:39
2018/04/16 10:23