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

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

ただいまの
回答率

90.48%

  • PHP

    24503questions

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

  • WordPress

    9119questions

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

【WordPress】カスタムタクソノミーで絞り込んだ場合の検索結果が表示されない。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,204

hrk0114

score 2

前提・実現したいこと

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

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で質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    24503questions

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

  • WordPress

    9119questions

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