CG
(@du-bist-der-lenz)
search-{$post_type}.php
の箇所は、実際ではカスタム投稿名になっているのですよね。
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="カスタム投稿タイプ名">
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 );
ishitaka様
お世話になります。
var_dump( $post_types );で確認したところ
「string(4) “post”」と表示されます。
カスタム投稿タイプ名が取得できていないようなのですが、
原因はお分かりになりますでしょうか?
呼び出し元の検索フォームに
<input type="hidden" name="post_type" value="カスタム投稿タイプ名">
を記述していますか?
別の場所の検索フォームに記述しているのではないでしょうか?
ishitaka様
お世話になります。
呼び出し元の検索フォームに
<input type=”hidden” name=”post_type” value=”カスタム投稿タイプ名”>
と記述してあります。
これで検索すると呼び出されるテンプレートがsearch.phpで、
var_dump( $post_types );で確認すると「string(4) “post”」と表示されます。
下記アドレスでアクセスした場合、$post_types は正しい値になりますか?
(サイトアドレス)?post_type=(カスタム投稿タイプ名)&s=(検索文字列)
ishitaka様
お世話になります。
他のテーマではどうなのだろうかと「Twenty Seventeen」の
functions.phpに同じコードを書いて、search-news.php等の
ファイルを入れて検索したところいきなりエラー。。。
でよく調べると参照サイトでコピーしたコードの一部(“や’)が
全角であることが判明。
コードの文字を全て半角にして見たらきれいに動作。
($post_typesはstring(3) “news”)
とここまでは良かったのですが、元のテーマに変換したコード
を書いてみても「string(4) “post”」と表示。。。
そもそも全角混じりのコードを書いてもエラーを出さなかったわけで
自作のfunctions.phpに問題があるということなのでしょうか?
それともsearch.phpなどの検索ファイルに問題があるのでしょうか?
自己解決致しました。
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’);
多分これで良いのだと思います。
ご回答頂いた方に感謝いたします。ありがとうございました。