WordPressで特定の投稿タイプに対する検索結果を制限する方法

特定の投稿タイプに検索結果を制限する方法を考えたことはありますか?それほど難しくありません。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'));

配列変数の値を変更することで、検索結果をフィルタリングできます。現在は投稿とページを表示するように設定されていますが、表示したいものに変更できます。

開示:当社のコンテンツは読者によってサポートされています。これは、当社のリンクの一部をクリックすると、当社が手数料を得る可能性があることを意味します。WPBeginnerがどのように資金提供されているか、それがなぜ重要か、そしてどのように私たちをサポートできるかについては、こちらをご覧ください。当社の編集プロセスはこちらです。

究極のWordPressツールキット

無料のツールキットにアクセスしましょう - すべてのプロフェッショナルが持つべきWordPress関連の製品とリソースのコレクションです!

読者とのインタラクション

26 CommentsLeave a Reply

  1. このコードをありがとうございます。動作しました。最終更新は2013年ですが!私のテーマでもインスタント検索を使用しており、そこでも結果を制限したいのですが、どうすればよいですか?

  2. 現在のテーマでは、検索された用語/単語の最初の数行で投稿が表示されます。これをカスタマイズして、投稿の抜粋に検索された用語/単語を含む段落を表示したいと考えています。つまり、検索結果の最初の段落ではなく、投稿の抜粋に関連するテキストを表示したいのです。どなたかこれを手伝っていただけますか?

  3. Hello,

    特定の投稿タイプと特定のカスタム分類タームの結果を制限するにはどうすればよいですか?

  4. テーマの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’);

  5. これは、サイドバーの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’);

    • 支援ありがとうございます。許可された 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’);

      • これはどのように実装されますか? Greg のコメントを正しく読んでいる場合、サイトの他の領域のデフォルトの検索を維持しながら、投稿タイプに限定された単一のフォームが必要ということになります。

        私が尋ねているのは、作業中のサイトに検索機能に影響を与えることなく、検索可能な「リソースライブラリ」が必要だからです。

  6. こんにちは、

    検索フィルターでページを制限できません。
    投稿内のみを検索し、ページは検索対象外にしたいです。

    $query->set(‘post_type’,array(‘post’));
    This displays pages too.

  7. このコードを使用して、検索結果を投稿ではなくページに絞り込みました。その点では機能しましたが、コンテンツではなくページ名のみを検索しているようです。たとえば、ユーザーが「pricing」を検索すると、Pricingページが結果として表示されますが、「price」または「cost」(どちらも価格ページにある単語)を検索しても何も見つかりません。不足しているコードスニペットはありますか?

  8. 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 :)

  9. あなたのスニペットには1つの問題があります:

    バックエンドの検索結果を制限します。次でラップする必要があります。


    if ( !is_admin() ) {
    // スニペット
    }

  10. では、これを特定の検索バーに適用するにはどうすればよいですか?サイト上のすべての検索バーにフィルターが適用されるわけではありませんよね?

返信する

コメントを残していただきありがとうございます。すべてのコメントは、当社のコメントポリシーに従ってモデレーションされますので、ご了承ください。メールアドレスは公開されません。名前フィールドにキーワードを使用しないでください。個人的で有意義な会話をしましょう。