サポート » 使い方全般 » WordPressでカスタム投稿タイプ別に検索するには?

  • 解決済 torasan

    (@torasan)


    プラグインいらず!カスタム投稿タイプごとの絞り込み検索機能実装
    http://blog.keisuke11.com/webdesign/search-form-
    カスタム投稿タイプ内のフリーワード検索
    http://www.misallychan.com/entry/2017/04/12/113000
    WordPressで特定のカスタム投稿内だけ検索する検索フォーム
    http://webmateria.co.jp/wordpress-custom-search/

    上記3サイトのコードを試しているのですが(以下コード)、

    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;
    }

    「search-blog.phpとかsearch-news.phpとか「search-」に「カスタム投稿名」をつけたテンプレート名で用意して下さい。」とはあるものの、実際検索するとデフォルトの「search.php」ヘ飛んでしまい、「カスタム投稿名」をつけたファイル(search-blog.phpなど)を参照しません。

    上記コードでは無理なのでしょうか?
    他に上手く行かない要因としては、カスタム投稿は「Custom Post Type UI」を使用していますが、設定に何か問題があるのでしょうか?

    詳しい方がおられましたらご教示下さい。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • CG

    (@du-bist-der-lenz)

    search-{$post_type}.phpの箇所は、実際ではカスタム投稿名になっているのですよね。

    トピック投稿者 torasan

    (@torasan)

    CG様、返信有難うございます。

    >search-{$post_type}.phpの箇所は、実際ではカスタム投稿名になっているのですよね。

    この部分を例えばsearch-blog.phpにするとカスタム投稿名blogは検索できますが、
    他のカスタム投稿(例:news)の検索が出来なくなってしまうので違うと思ったのですが…。

    以下のコードのどこかで条件分けをするのでしょうか?
    カスタム投稿名がblogであればsearch-blog.phpを参照し、カスタム投稿名がnewsであればsearch-news.phpという具合に。

    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;
    }

    こんにちは

    検索フォームはどのように記述していますか?
    下記コードのように post_type パラメータでカスタム投稿タイプ名を渡すようにしていますか。

    <input type="hidden" name="post_type" value="カスタム投稿タイプ名">

    トピック投稿者 torasan

    (@torasan)

    ishitaka様

    お世話になります。
    検索フォームは参照サイトと同じように、
    <form method=”get” action=”<?php bloginfo( ‘url’ ); ?>”>
    <input type=”hidden” name=”post_type” value=”カスタム投稿タイプ名”>
    <input name=”s” id=”s” type=”text” />
    <input id=”submit” type=”submit” value=”検索” />
    </form>
    にしてあります。

    カスタム投稿タイプ名にはblogなりnewsなりを入れてみたのですが、
    特定のカスタム投稿タイプのみに絞って検索することが出来ません。
    search-blog.phpやsearch-news.phpを設置してもsearch.phpヘ
    飛んでしまうため、ブログ全体の記事から検索結果を出力してしまいます。

    $post_types = get_query_var( 'post_type' );

    この $post_types の値は正しいカスタム投稿タイプ名を取得できていますか。var_dump 等で確認してみてください。

    $post_types = get_query_var( 'post_type' );
    var_dump( $post_types );
    トピック投稿者 torasan

    (@torasan)

    ishitaka様

    お世話になります。
    var_dump( $post_types );で確認したところ
    「string(4) “post”」と表示されます。
    カスタム投稿タイプ名が取得できていないようなのですが、
    原因はお分かりになりますでしょうか?

    呼び出し元の検索フォームに
    <input type="hidden" name="post_type" value="カスタム投稿タイプ名">
    を記述していますか?
    別の場所の検索フォームに記述しているのではないでしょうか?

    トピック投稿者 torasan

    (@torasan)

    ishitaka様

    お世話になります。
    呼び出し元の検索フォームに
    <input type=”hidden” name=”post_type” value=”カスタム投稿タイプ名”>
    と記述してあります。
    これで検索すると呼び出されるテンプレートがsearch.phpで、
    var_dump( $post_types );で確認すると「string(4) “post”」と表示されます。

    下記アドレスでアクセスした場合、$post_types は正しい値になりますか?

    (サイトアドレス)?post_type=(カスタム投稿タイプ名)&s=(検索文字列)

    トピック投稿者 torasan

    (@torasan)

    ishitaka様

    お世話になります。
    他のテーマではどうなのだろうかと「Twenty Seventeen」の
    functions.phpに同じコードを書いて、search-news.php等の
    ファイルを入れて検索したところいきなりエラー。。。

    でよく調べると参照サイトでコピーしたコードの一部(“や’)が
    全角であることが判明。
    コードの文字を全て半角にして見たらきれいに動作。
    ($post_typesはstring(3) “news”)

    とここまでは良かったのですが、元のテーマに変換したコード
    を書いてみても「string(4) “post”」と表示。。。
    そもそも全角混じりのコードを書いてもエラーを出さなかったわけで
    自作のfunctions.phpに問題があるということなのでしょうか?
    それともsearch.phpなどの検索ファイルに問題があるのでしょうか?

    トピック投稿者 torasan

    (@torasan)

    自己解決致しました。
    functions.phpの記事検索結果から固定ページを除外する設定を
    修正したところ無事カスタム投稿も検索できるようになりました。

    旧バージョン
    function SearchFilter($query) {
    if(!is_admin()){
    if ($query->is_search) {
    $query->set(‘post_type’, ‘post’);}
    return $query;}
    else {
    return false;}}
    add_filter(‘pre_get_posts’,’SearchFilter’);

    新バージョン
    function my_posy_search($search) {
    if(is_search()) {
    $search .= ” AND post_type = ‘post'”; }
    return $search;}
    add_filter(‘posts_search’, ‘my_posy_search’);

    多分これで良いのだと思います。
    ご回答頂いた方に感謝いたします。ありがとうございました。

    トピック投稿者 torasan

    (@torasan)

    本件は解決済みです。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • トピック「WordPressでカスタム投稿タイプ別に検索するには?」には新たに返信することはできません。