• 解決済 aki_8419

    (@aki_8419)


    こんばんは。
    色々調べて試してみても、どうしても出来なかったので、大変恐縮ですが、どなたかお力をかして頂けますと幸いに存じます。

    【やりたいこと】
    新着情報一覧(カスタム投稿タイプ)とブログ一覧(通常の投稿タイプ)でそれぞれ検索フォームを使用したいのですが、各検索フォームごとに検索対象を別けたいです。

    【現状】
    1)新着情報はカスタム投稿タイプで管理、ブログは通常の投稿タイプで管理しています。
    2)カスタム投稿タイプはプラグインは使用しておりません。
    3)カスタム投稿タイプは検索にかかるように設定しています。
    4)テーマは10daysを使用しています。

    【今までやったこと。】
    1)functions.phpにsearch.php振り分けのコードを記入
    こちらのフォーラムに書いてありましたが、下記コードをfunctions.phpに書きました。
    https://ja.forums.wordpress.org/topic/13350?replies=8

    // テンプレート読み込みフィルターをカスタマイズ
    add_filter('template_include','custom_search_template');
    function custom_search_template($template){
    	// 検索結果の時
    	if ( is_search() ) {
    		// 表示する投稿タイプを取得
    		$post_types = get_query_var('post_type');
    
    		// search-{$post_type}.php の読み込みルールを追加
    		foreach ( (array) $post_types as $post_type )
    		$templates[] = "search-{$post_type}.php";
    		$templates[] = 'search.php';
    
    		$template = get_query_template('search',$templates);
    
    	}
    	return $template;
    }

    2)search.php と search-news.phpを作成

    3)検索フォームのコードをnews-page.phpに記入
    検索フォームのコードは下記を使っています。
    news-page.phpは、新着情報一覧を表示する固定ページテンプレートです。

    <div id="search-box">
    <form method="get" action="<?php bloginfo('url') ;?>">
        <input type="text" name="s" id="s" />
        <input id="submit" type="submit" value="検索"/>
    </form>
    </div>

    【私なりの考察】
    よく分からないなりに色々考えたのですが、
    上記検索フォームのコードを記入していますが、そもそも検索ボタンを押した後に、search-news.phpとsearch.phpのどちらを読込むかを判定する材料が取得できていないのかなとも思いました。
    新着情報のページから検索ボタンが押されたのかがしっかり判定されていないのかと。。

    全く無知で大変申し訳ありませんが、どなたかご教示頂けますと幸いです。
    どうぞよろしくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • gblsm

    (@gblsm)

    検索ボタンを押したときの遷移先URLが wordpress/?s=hoge なので、普通の投稿だけが検索されます(pre_get_posts フック等でカスタマイズしていない場合)。遷移先URLを wordpress/?post_type=カスタム投稿タイプ名&s=hoge にすれば大丈夫です。

    トピック投稿者 aki_8419

    (@aki_8419)

    gblsm様

    早々のご回答ありがとうございます!
    色々無知で申し訳ないのですが、URLを
    wordpress/?post_type=カスタム投稿タイプ名&s=hoge
    にするためには、どのようにしたら良いのでしょうか?

    <input type=”text” name=”?post_type=news&s” id=”s” />
    とすると、
    wordpress/?post_type%3Dnews%26s=
    のように文字化けしてしまいます。。

    かなり初歩的なことなのかなと思うのですが、、

    申し訳ございませんがご教示頂けませんでしょうか。。
    どうぞよろしくお願い致します。

    mocomoco

    (@silent_dandy)

    フォームの基本的な仕組みを学ぶとgblsmさんのおっしゃっている事が実現できるようになると思います。
    http://www.kanzaki.com/docs/html/htminfo31.html

    <input type="text" name="?post_type=news&s" id="s" />
    これが動かない理由も上記のURLをよく読んでいただければわかるかとおもいます。

    今回の例では

    <div id="search-box">
    <form method="get" action="<?php bloginfo('url') ;?>">
        <input type="text" name="s" id="s" />
        <input id="submit" type="submit" value="検索"/>
    </form>
    </div>

    ここに例えばhiddenフィールドを使ってカスタム投稿タイプ名も一緒に送信するような形にすると良いかと思います。

    トピック投稿者 aki_8419

    (@aki_8419)

    mocomoco様

    ご指導ありがとうございます!
    頂きましたURLを参考に試したみたところ、
    下記コードでgblsm様よりご教示頂いた内容が実現できました!

    <div id="search-box">
    <form method="get" action="<?php bloginfo('url') ;?>">
        <input type="hidden" name="post_type" value="news">
        <input type="text" name="s" id="s" />
        <input id="submit" type="submit" value="検索"/>
    </form>
    </div>

    お恥ずかしながら、この辺は無知だったので、参考URLを勉強させて頂き、とても良い機会となりました。
    本当にありがとうございました!

    gblsm様
    上記の通り、gblsm様よりご教示頂いた内容を元に解決できました。
    だいぶ悩んでいたので、、、本当に助かりました。
    わざわざ時間を割いてご回答頂き、ありがとうございました!

    トピック投稿者 aki_8419

    (@aki_8419)

    “解決済み”を入れ忘れておりました。
    おかげ様で無事解決致しましたので、解決済みとさせて頂きます。

5件の返信を表示中 - 1 - 5件目 (全5件中)

トピック「カスタム投稿タイプと通常の投稿タイプで検索結果を振り分けたい」には新たに返信することはできません。