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

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

ただいまの
回答率

88.77%

wordpress 検索フォームについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 368

marudan55

score 16

前提・実現したいこと

カスタム投稿(omairi)のカスタムフィールドで入力した値をもとにsearchform.php/search.phpで検索システムを作成しようと思っています。
条件がカスタム投稿(omairi)で入力した記事だけ表示すること。←これはできました。
参照したい値がカスタム投稿の投稿名、カスタムフィールドで指定したカスタムタクソノミー(animal_type)、この2つの値です。
search.phpにてカスタムタクソノミー(animal_type)のドロップダウンリスト、投稿名・本文で検索できる入力欄を表示しています。

問題なのは、カスタムタクソノミー(animal_type)のドロップダウンリストだけを選択して検索した場合、カスタムタクソノミー・投稿名両方を指定した場合は想定通りの記事が表示されるのですが、投稿名のみで検索した場合検索結果が0件になってしまいます。

投稿名のみで検索した場合に想定した記事が表示されるようにしたいです。

searchform.php

<form id="form" action="<?php echo esc_url(home_url('/')); ?>" method="get">
<label for="animal_type_select">種類検索</label>
<?php wp_dropdown_categories('taxonomy=animal_type&name=animal_type&value_field=slug&hide_empty=0&show_option_none=- - -&id=animal_type_select'); ?>
<label for="s_name">お名前検索</label>    
<input id="s_name" name="s" type="search" placeholder="お名前" value="<?php the_Search_query(); ?>"/>
    <input type="hidden" name="post_type" value="omairi">
    <button type="submit" id="s_btn">検索</button>
</form>

search.php

<?php get_header(); ?>

<?php $term_slug = $_GET['animal_type'];        
            $animal_type = get_animal_type($term_slug);
            $search_query = get_search_query();
            $total_results = $wp_query->found_posts;        
            if(empty($animal_type)) {
                $result = $search_query;
            }
            elseif(empty($search_query)) {
                $result = $animal_type;
            }
            else {
                $result = $animal_type . '・' . $search_query;
            }
            $result = "「" . $result . "」" . "の検索結果";
            ?>

<div id="breadcrumb" class="clearfix">
        <ul class="contents_inner">
            <li><a href="<?php echo esc_url(home_url('/'))?>">HOME</a></li>
                        <li><a href="<?php echo esc_url(home_url('archives/omairi/'))?>">お参り広場</a></li>
                        <li><?php echo $result ?></li>
        </ul>
</div>

    <div id="lower_img">
        <div class="contents_inner">
            <h2 class="min mt">お参り広場</h2>
            <img src="<?php echo get_template_directory_uri(); ?>/img/area/title_bog.png" class="title_bog">
        </div>
        <p class="boder_line"></p>
        </div>

        <!--検索窓呼び出し-->
        <?php get_search_form(); ?>

    <section id="omairi_archive">
        <div class="contents_inner clearfix">
        <h3 class="search_query"><?php echo $result ?>/<?php echo $total_results; ?></h3>

        <?php if($search_query || $animal_type): ?>
        <?php if (have_posts()): ?>
        <?php while (have_posts()): the_post(); ?>
        <?php //変数定義
                    $img = get_field('omairi_img');            
                    $place = get_field('omairi_place');            
                    $background = get_field('omairi_background');
                    $term_slug = $_GET['animal_type'];        
                    $animal_type = get_animal_type($term_slug);
                ?>

        <article class="omairi_box omairi_box_<?php echo $background;?>">
                        <img src="<?php echo $img; ?>" alt="<?php echo get_the_title(); ?>">
                        <p class="animal_type">type:<?php echo $animal_type; ?></p>            
            <p class="name">name:<?php echo get_the_title(); ?></p>
                        <p class="place">place:<?php echo $place; ?></p>
                        <a class="detail_btn" href="<?php the_permalink(); ?>">お参りする</a>           
        </article>    

        <?php endwhile; ?> 
        <?php else: ?>            
          <p class="not_found">検索キーワードに該当する記事がありませんでした。</p>                
                <?php endif; ?>
        <?php else: ?>
            <p class="not_found">検索キーワードを指定してください。</p> 
        <?php endif; ?>

        </div>
    </section>

試したこと

searchform.phpのwp_dropdown_categories部分を削除したら投稿名の検索はうまくいきます。

どなたかわかる方いらっしゃいましたらよろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2019/05/30 16:23 編集

    うまくいきませんだけでは、状況がわかりません。
    たとえば、「データは5件入力済みの〇〇を検索したら、1件も表示されない。」「〇〇を検索したのに 関係ない項目も含めて全件表示される」等のように 発生している現象を具体的に記載してください。

    また、検索部分のコードがありませんが、どの様なコードで実行しているのでしょうか?

    キャンセル

  • marudan55

    2019/05/31 09:45

    ご指摘ありがとうございます。詳しく書き直しました。
    が、書き直しているうちにふと思いついたことを実行したら想定している動きになりました。
    きっかけを下さり、ありがとうございました。

    キャンセル

回答 1

check解決した方法

0

search.phpのwp_dropdown_categoryの条件が間違っていました。
show_option_none = ---の部分をshow_option_all = ---に修正したら想定している動きになりました。

要は投稿名だけで検索した場合、カスタムタクソノミーのドロップダウンリストの初期値がカテゴリーなしになっていたので、要はカテゴリーなし+投稿名だったので記事が引っ掛からなかったようです。
初期値を全てのカテゴリーにしたので、すべてのカテゴリー+投稿名になったことで狙った記事が表示されるようになりました。

ご迷惑をおかけしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

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

関連した質問

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