質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4580閲覧

WordPressでタームを選択しなくてもタクソノミーだけで検索結果を表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/04/26 19:11

編集2017/04/26 20:15

現在、下記のブログ記事を参考に、特定のカスタム投稿に紐付けた、特定のタクソノミーに属するタームで検索出来るフォームを制作し、稼働しているのですが、
タームを選択しない状態で検索を行われた時に、タクソノミーに属する投稿を全て表示したいと思うのですが、
表示の制御もできなければ、参考になる情報も見つけられず八方塞がりです。

また、フォームに出力されるタームの数が、紐づけされた投稿があるターム名のみの表示となります。
これも、投稿の紐付け状況に関わらず全て表示させたいです。

重ね重ね、誠に恐れ入りますが、何卒ご教授願います。

参考サイト: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; ?>

こちらのコードで出力すると言う記事が多くあるのですが、
これで出力される数値は、検索結果の件数と合致しません。

合わせて解決のご指導を頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず確認ですが、検索画面でtaxonomy1で選択がない場合はtaxonomy1に属するターム全てを検索結果に出すという認識でしょうか?

上記の認識であっているならば、taxonomy1が選択されなかった場合は検索結果に遷移する際に$_GET['item']の値が空か定義されていないと思われます。

なのでsearch.php上で$_GET['item']が空の場合の処理を追加してあげれば取得できるかと思います。

** search.php **

PHP

1if($item){ 2$taxquerysp[] = array( 3'taxonomy'=> $item_type, 4'terms'=> $item, 5'include_children'=>false, 6'field'=>'slug', 7'operator'=>'AND' 8); 9} 10// 以下追記のソースです。 11// ターム情報がない場合は指定のタクソノミーに属するターム全てで検索 12else { 13 // ターム一覧を取得しスラッグ名を配列に格納 14 $term_objs = get_terms($item_type); 15 $terms = array(); 16 foreach($term_objs as $term){ 17 $terms[] = $term->slug; 18 } 19 // 取得したターム一覧をqueryの条件に 20 $taxquerysp[] = array( 21 'taxonomy' => $item_type, 22 'field' => 'slug', 23 'terms' => $terms, 24 'operator' => 'IN', 25 'include_children' => false, 26 ); 27}

動作確認をしていないので細かい点でミスがあるかもしれません。
参考になればと思います。

投稿2017/04/27 01:50

koou

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/27 06:19

koou 様 ご指導ありがとうございます! 見事に検索の絞込が出来ました! 嬉しくてたまりません!!! 頂いたソースで検索結果の表示については、解決出来たのですが、 検索結果の件数表示がまで完了できていません。 恐縮ですが、引き続きご指導頂けると幸いです
退会済みユーザー

退会済みユーザー

2017/04/27 06:32

koou 様 度々恐れ入ります! 再度質問させて頂いた、件数表示については、自己解決出来ました! ソースの書き順が問題でありました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問