現在、下記のブログ記事を参考に、特定のカスタム投稿に紐付けた、特定のタクソノミーに属するタームで検索出来るフォームを制作し、稼働しているのですが、
タームを選択しない状態で検索を行われた時に、タクソノミーに属する投稿を全て表示したいと思うのですが、
表示の制御もできなければ、参考になる情報も見つけられず八方塞がりです。
また、フォームに出力されるタームの数が、紐づけされた投稿があるターム名のみの表示となります。
これも、投稿の紐付け状況に関わらず全て表示させたいです。
重ね重ね、誠に恐れ入りますが、何卒ご教授願います。
参考サイト:KOTORI|絞り込み検索をプラグインを使わずに実装
WordPressの設定状況
カスタム投稿
-タクソノミー1
- ターム1
- ターム2
- ターム3・・・
- タクソノミー2 - ターム1 - ターム2 - ターム3・・・ - タクソノミー3
・
・
・
以下のソースでは、タクソノミーのスラッグだけ、常に送信するようにしています。
これは、同一ページに複数のフォームをタブ切り替えで設置しており、
タブごとに、検索するタクソノミーを変えているためです。
・タブ1のフォームでは、タクソノミー1に属するアイテムを検索させたいから。
・タブ2のフォームでは、タクソノミー2に属するアイテムを検索させたいから。
・
・
・
このような状況です。
フォームのソース
このようなフォームを6つ設置しています。
php
1<form method="get" id="searchform" action="<?php echo home_url('/'); ?>"> 2 3 <label class="label">taxonomy1のタームから選ぶ</label> 4 <select name="item"> 5 <option value="" selected>未設定</option> 6 <?php 7 $taxonomy_name = 'item_category1'; 8 $taxonomys = get_terms( $taxonomy_name ); 9 if ( !is_wp_error( $taxonomys ) && count( $taxonomys ) ): 10 foreach ( $taxonomys as $taxonomy ): 11 $tax_posts = get_posts( array( 'post_type' => get_post_type( 'custom_post' ), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); 12 if ( $tax_posts ): 13 ?> 14 <option value="<?php echo $taxonomy->slug; ?>"> 15 <?php echo $taxonomy->name; ?> 16 </option> 17 <?php 18 endif; 19 endforeach; 20 endif; 21 ?> 22 <input type="hidden" name="item_type" value="<?php echo $taxonomy_name; ?>"> 23 </select> 24 25 <label class="label">taxonomy2のタームから選ぶ</label> 26 <select name="shop"> 27 <option value="" selected>未設定</option> 28 <?php 29 $taxonomy_name = 'shop_category'; 30 $taxonomys = get_terms( $taxonomy_name ); 31 if ( !is_wp_error( $taxonomys ) && count( $taxonomys ) ): 32 foreach ( $taxonomys as $taxonomy ): 33 $tax_posts = get_posts( array( 'post_type' => get_post_type( 'custom_post' ), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); 34 if ( $tax_posts ): 35 ?> 36 <option value="<?php echo $taxonomy->slug; ?>"> 37 <?php echo $taxonomy->name; ?> 38 </option> 39 <?php 40 endif; 41 endforeach; 42 endif; 43 ?> 44 </select> 45 46 <label class="label" for="s">キーワードからさがす</label> 47 <input type="text" class="field" name="s" id="s" placeholder="検索"/> 48 <input type="submit" class="submit-button" name="submit" id="searchsubmit" value="検 索"/> 49</form>
検索結果 search.phpのソース
php
1<?php get_header(); ?> 2 3<?php 4$s = $_GET['s']; 5$item = $_GET['item']; 6$item_type = $_GET['item_type']; 7$shop = $_GET['shop']; 8 9if($item){ 10$taxquerysp[] = array( 11'taxonomy'=> $item_type, 12'terms'=> $item, 13'include_children'=>false, 14'field'=>'slug', 15'operator'=>'AND' 16); 17} 18if($shop){ 19$taxquerysp[] = array( 20'taxonomy'=>'shop_info', 21'terms'=> $shop, 22'include_children'=>false, 23'field'=>'slug', 24'operator'=>'AND' 25); 26} 27$taxquerysp['relation'] = 'AND'; 28 29?> 30 31<?php query_posts( array( 32'post_type' => 'custom_post', 33'tax_query' => $taxquerysp, 34's' => $s, 35) 36);?> 37 38<ul id="item_list"> 39<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 40<?php get_template_part('loop-item_list'); ?> 41<?php endwhile; else : ?> 42 43<li>該当なし</li> 44 45<?php endif;wp_reset_query(); ?> 46</ul> 47 48<?php get_footer(); ?>
追記
新たに問題が発生しまして。。。
検索結果の件数を表示したくて知らべたところ、
php
1<?php echo $wp_query->found_posts; ?>
こちらのコードで出力すると言う記事が多くあるのですが、
これで出力される数値は、検索結果の件数と合致しません。
合わせて解決のご指導を頂けると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/04/27 06:19
退会済みユーザー
2017/04/27 06:32