特定の投稿タイプに検索結果を制限する方法を考えたことはありますか?それほど難しくありません。functions.phpファイルを変更して、WordPressで検索機能を無効にする方法をすでに紹介しました。今回は、検索結果をフィルタリングするのと同じことを行います。
functions.phpファイルを開き、次のコードを追加します。
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type',array('post','page'));
}
return $query;
}
add_filter('pre_get_posts','searchfilter');
次の行に注意してください
$query->set('post_type',array('post','page'));
配列変数の値を変更することで、検索結果をフィルタリングできます。現在は投稿とページを表示するように設定されていますが、表示したいものに変更できます。


Ankit manandgar
投稿タイトルのみで検索結果を取得するにはどうすればよいですか?
Anna
このコードをありがとうございます。動作しました。最終更新は2013年ですが!私のテーマでもインスタント検索を使用しており、そこでも結果を制限したいのですが、どうすればよいですか?
Sparsh Goyal
現在のテーマでは、検索された用語/単語の最初の数行で投稿が表示されます。これをカスタマイズして、投稿の抜粋に検索された用語/単語を含む段落を表示したいと考えています。つまり、検索結果の最初の段落ではなく、投稿の抜粋に関連するテキストを表示したいのです。どなたかこれを手伝っていただけますか?
Azamat
Hello,
特定の投稿タイプと特定のカスタム分類タームの結果を制限するにはどうすればよいですか?
Steven
テーマのfunctions.phpファイルに簡単な関数がありますが、検索語で投稿のみをフィルタリングするはずです…何かを検索すると、HTTP 500エラー「このページを表示できません」が表示されます。私の関数で何が間違っているか、誰かアイデアはありますか?
function searchFilter($query) {
if ($query->is_search)
{
wp_reset_query();
$args = array ( ‘s’ => $_GET[‘s’] );
query_posts( $args );
}
}
add_filter(‘pre_get_posts’, ‘searchFilter’);
Greg
これは、サイドバーのsearchformを含むすべての検索フォームをカスタム投稿タイプに制限しています。これはすべての結果を返す必要があります。これは私には機能しています:
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
if(isset($_GET[‘post_type’])) {
$type = $_GET[‘post_type’];
if($type == ‘book’) {
$query->set(‘post_type’,array(‘book’));
}
}
}
return $query;
}
add_filter(‘pre_get_posts’,’searchfilter’);
Jonathan Joosten
支援ありがとうございます。許可された post_types のみを検索できるようにコードを改善しました。
function searchfilter($query)
{
if ($query->is_search && !is_admin() )
{
if(isset($_GET[‘post_type’])) {
$types = (array) $_GET[‘post_type’];
$allowed_types = get_post_types(array(‘public’ => true, ‘exclude_from_search’ => false));
foreach($types as $type)
{
if( in_array( $type, $allowed_types ) ) { $filter_type[] = $type; }
}
if(count($filter_type))
{
$query->set(‘post_type’,$filter_type);
}
}
}
}
add_filter(‘pre_get_posts’,’searchfilter’);
Dan Sz.
これはどのように実装されますか? Greg のコメントを正しく読んでいる場合、サイトの他の領域のデフォルトの検索を維持しながら、投稿タイプに限定された単一のフォームが必要ということになります。
私が尋ねているのは、作業中のサイトに検索機能に影響を与えることなく、検索可能な「リソースライブラリ」が必要だからです。
Tadeu
投稿のタイトル、カテゴリ、タグのみに検索を限定することは可能ですか?
サンディープ
こんにちは、
検索フィルターでページを制限できません。
投稿内のみを検索し、ページは検索対象外にしたいです。
$query->set(‘post_type’,array(‘post’));
This displays pages too.
ジャレッド
この点について、$query を返す必要はありません。
http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Peter
素晴らしいヒントをありがとうございます!
WPBeginnerスタッフ
Nick WordPress の検索機能は、コンテンツを見つけるのがあまり得意ではありません。
Nick
このコードを使用して、検索結果を投稿ではなくページに絞り込みました。その点では機能しましたが、コンテンツではなくページ名のみを検索しているようです。たとえば、ユーザーが「pricing」を検索すると、Pricingページが結果として表示されますが、「price」または「cost」(どちらも価格ページにある単語)を検索しても何も見つかりません。不足しているコードスニペットはありますか?
emre
Hi,
I have a question and I couldn’t get a solution since last month.
I have lost of categories, pages and re-directions in my blog so my search box finds many unnecessary results when you try to search something. I want to customize my search.php for only categories part. In other words, we you search something, the results should be only from categories sections. So I will be get rid of redundant & duplicated results. My current codes are as below…Please help me
sam
特定のカテゴリで制限する方法は?ありがとう
WPBeginnerサポート
Sam、WordPressでタクソノミー検索フィルターを追加する方法に関するガイドをご覧ください。
管理者
Hasan Gad Allah
Thank you , i was looking for that code (Y)
Felix
あなたのスニペットには1つの問題があります:
バックエンドの検索結果を制限します。次でラップする必要があります。
if ( !is_admin() ) {
// スニペット
}
bloggingfuture
これはWordPressにとって非常に価値のあるコードです。ありがとう!
アラン・ヒューズ
では、これを特定の検索バーに適用するにはどうすればよいですか?サイト上のすべての検索バーにフィルターが適用されるわけではありませんよね?
goJohnnyGo
特定の検索バー(普遍的ではない)にこれを適用する方法を見つけましたか?
編集スタッフ
はい、こちらに記事があります:
https://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
管理者
scotte_sprott
検索結果をページのみに表示するにはどうすればよいですか?
wpbeginner
@scotte_sprott 配列では、pageのみを保持し、postsを削除してください。