【WordPress】カスタムタクソノミーで絞り込んだ場合の検索結果が表示されない。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 2,040
前提・実現したいこと
WordPressでショップ管理のカスタム投稿(スラック名[shop])を作成して、カスタム投稿にひも付けたカスタムタクソノミー(地域[area]、サービスメニュー[menu])での検索機能を実装しようとしています。
検索フォームテンプレートとして「searchform.php」
検索フォームを埋め込むページテンプレートとして「searchpage.php」
検索結果表示用テンプレートとして「search.php」
の3つのテンプレートファイルを作成しました。
発生している問題
問題は、検索結果が出力されないことです。
※検索条件の入力画面から結果表示ページへの遷移までは問題なく出来ます。
※検索データは1件も表示されません。
理解できていないこと
カスタムタクソノミーで検索した場合は、検索データがどのような流れで取得されてくるのか、ということです。またsearch.phpに記載するコードの内容もよくわかってないです。
該当のソースコード
searchform.php
<form role="search" method="get" class="form-group" action="<?php echo home_url( '/' ); ?>">
<input type="search" class="form-control" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" /><br>
<input type="submit" class="btn btn-default" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>
<form role="search" method="get" class="form-group" action="<?php echo home_url( '/' ); ?>">
<h4>地域</h4>
<input type="hidden" name="s">
<select class="form-control mgb-15" name="area" id="input-id">
<option value="" selected="true">指定なし</option>
<?php
$terms = get_terms('area' , 'get=all');
foreach($terms as $term){
echo '<option value="' . $term->slug . '">' .
esc_html($term -> name) .
'</option>';}
?>
</select>
<div class="row mgb-15">
<div class="col-md-3">
<h4>サービスメニュー</h4>
</div>
<div class="col-md-9">
<input type="hidden" name="s">
<div class="service-menu">
<?php
$terms = get_terms('menu' , 'get=all');
$cnt = 0;
foreach($terms as $term){
echo '<input type="checkbox" name="menu[]" value="' . $term->slug . '"/>' .
esc_html($term -> name)." ";
// 改行タグ
$cnt++;
if ($cnt==3 or $cnt==6 or $cnt==9) {
echo '<br>';
}
}
?>
</div>
</div>
</div>
<input type="submit" class="btn btn-default mgb-15" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>
searchpage.php
<?php
/*
Template Name: Search Page
*/
?>
<?php load_template(TEMPLATEPATH . '/header-2.php'); ?>
<!--blog-starts-->
<div class="blog-section">
<div class="container">
<h2 class="heading text-left">検索ページ</h2>
<!--single-page-->
<div class="banner-bdy sig">
<div class="single">
<div class="sing-img-text">
<?php get_search_form(); ?>
</div>
<?php get_sidebar(); ?>
</div>
</div>
<!-- /single -->
</div>
</div>
<!--blog-ends-->
<?php get_footer(); ?>
search.php
<?php load_template(TEMPLATEPATH . '/header-2.php'); ?>
<!--blog-starts-->
<div class="blog-section">
<div class="container">
<h2 class="heading text-center">検索結果</h2>
<!--single-page-->
<div class="banner-bdy sig">
<div class="single">
<div class="sing-img-text">
<?php $args = array(
'post_type' => 'shop',
'tax_query' => array(
array('taxonomy' => 'area', 'terms' => $_GET['area-selection'], 'field' => 'slug'),
array('taxonomy' => 'menu', 'terms' => $_GET['menu-selection'], 'field' => 'slug')
),
);
query_posts($args); ?>
<?php
global $wp_query;
$total_results = $wp_query->found_posts;
$search_query = get_search_query();
?>
<h3 class="heading">検索結果<span>(<?php echo $total_results; ?>件)</span></h3>
<?php while(have_posts()): the_post(); ?>
<h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
<div class="row">
<!--■アイキャッチ画像-->
<div class="col-md-3 col-sm-4 col-xs-12">
<?php the_post_thumbnail(array(160, 220), array('alt' => get_the_title())); ?>
</div>
<!--■ショップ情報-->
<div class="col-md-9 col-sm-8 col-xs-12">
<!--住所-->
住所
<?php the_field('address',$post->ID); ?>
<br>
<!--アクセス-->
アクセス
<?php the_field('access',$post->ID); ?>
<br>
<!--電話番号-->
電話番号 <a href="<?php the_field('telphone-no',$post->ID); ?>"><?php the_field('telphone-no',$post->ID); ?></a>
<br>
<!--サービス-->
<div class="service">サービス</div>
<ul>
<?php wp_list_categories(array('taxonomy' => 'menu', 'title_li' => '')); ?>
</ul>
</div>
</div>
<hr>
<?php endwhile; ?>
</div>
<?php get_sidebar(); ?>
</div>
</div>
<!-- /single -->
</div>
</div>
<!--blog-ends-->
<?php get_footer(); ?>
補足
search.phpは以下の記事を参考に実装してみたのですが、ダメでした。
https://teratail.com/questions/28059
検索フォームを実装するにあたり、必要な知識と今回の問題に対するアプローチの方法を教えて頂けますと助かります。また、参考サイトや書籍などもお薦めのものがありましたら幸いです。
どうぞ、よろしくお願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
+1
質問内容を閲覧頂いた方、申し訳ないです。
上記のコードを少し修正すると上手く表示されるようになりました。
var_dump()などで出力内容を確かめたり、URLパラメータの値を見直して、query_postsあたりを修正しました。
具体的には、以下の修正内容となります。
【修正前】
<?php $args = array(
'post_type' => 'shop',
'tax_query' => array(
array('taxonomy' => 'area', 'terms' => $_GET['area-selection'], 'field' => 'slug'),
array('taxonomy' => 'menu', 'terms' => $_GET['menu-selection'], 'field' => 'slug')
),
);
query_posts($args); ?>
【修正後】
<?php $args = array(
'post_type' => 'shop',
'tax_query' => array(
array('taxonomy' => 'area', 'terms' => $_GET['area'], 'field' => 'slug'),
array('taxonomy' => 'menu', 'terms' => $_GET['menu'], 'field' => 'slug')
),
);
query_posts($args); ?>
$_GET部分をinput側のname属性値と合わせることにより、正しいクエリが発行できるようになったようです。
至らない者ですが、今後ともよろしくお願い致します。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.21%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる