Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
Coppa WPB
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

Come limitare i risultati della ricerca per specifici post type in WordPress

Nota editoriale: guadagniamo una commissione dai link dei partner su WPBeginner. Le commissioni non influenzano le opinioni o le valutazioni dei nostri redattori. Per saperne di più su Processo editoriale.

Vi siete mai chiesti come limitare i risultati della ricerca a specifici post type? Non è molto difficile. Vi abbiamo già mostrato come disabilitare la caratteristica di ricerca in WordPress modificando il file functions.php. Ora faremo la stessa cosa, ma per filtrare i risultati della ricerca.

Aprite il file functions.php e aggiungete i seguenti codici:

function searchfilter($query) {

    if ($query->is_search && !is_admin() ) {
        $query->set('post_type',array('post','page'));
    }

return $query;
}

add_filter('pre_get_posts','searchfilter');

Notare la riga che dice

$query->set('post_type',array('post','page'));

È possibile filtrare i risultati della ricerca modificando i valori della variabile array. Al momento è impostata per visualizzare articoli e pagine, ma è possibile modificarla per visualizzare tutto ciò che si desidera.

Divulgazione: I nostri contenuti sono sostenuti dai lettori. Ciò significa che se cliccate su alcuni dei nostri link, potremmo guadagnare una commissione. Vedi come WPBeginner è finanziato , perché è importante e come puoi sostenerci. Ecco il nostro processo editoriale .

Avatar

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

Il kit di strumenti WordPress definitivo

Ottenete l'accesso gratuito al nostro kit di strumenti - una raccolta di prodotti e risorse relative a WordPress che ogni professionista dovrebbe avere!

Reader Interactions

27 commentiLascia una risposta

  1. Syed Balkhi says

    Hey WPBeginner readers,
    Did you know you can win exciting prizes by commenting on WPBeginner?
    Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
    You can get more details about the contest from here.
    Start sharing your thoughts below to stand a chance to win!

  2. Anna says

    Thanks for this code – it worked, although you last updated in 2013! My theme uses also an Instant Search and I would like to limit the results there aswell. How could I do that?

  3. Sparsh Goyal says

    My present theme shows post with few starting lines for searched term/word. I want to customise it to show that paragraph having searched term/word in post excerpt. In other words, I want to show related text in post excerpt not starting paragraph in search results. Can anyone help me to do this….

  4. Steven says

    I’ve got an easy function in my themes functions.php file, which should only filter the Posts by a search term… when I search something now, the HTTP 500 Error “The website cannot display the page” appears. Anyone got an Idea, whats wrong with my function?

    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. Greg says

    This is restricting all search forms to the custom post type – including my sidebar searchform, which needs to return all results. This is working for me:

    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 says

      Thanks for the assist, I improved your code so people can only search allowed 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. says

        How is this implemented? If I’m reading Greg’s comment, correctly we want a single form that is limited to a post type, while keeping default search intact for other areas of the site.

        I’m asking because a site i’m working on needs a searchable “Resource Library”, which I’d like to build out with compromising the normal search functionality.

  6. Sandeep says

    Hi,

    I’m not able to restrict pages in search filter.
    I just need the search within the posts and not pages.

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

  7. Nick says

    I used this code to restrict my search results to Pages, not Posts. It worked in that regard, however, it seems to only search the Page names as opposed to content. For instance, if a user searches “pricing”, the Pricing page will be a result but if they search “price” or “cost” (both of which are words on the pricing page) nothing is found. Is there a snippet of code I’m missing?

  8. emre says

    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. Felix says

    There’s one problem with your snippet:

    It limits the search results in the backend, you should wrap it with:


    if ( !is_admin() ) {
    // snippet
    }

  10. Alan Hughes says

    So how would you apply this to a specific search bar? It doesn’t just apply the filter to every search bar on your site would it?

Lascia una risposta

Grazie per aver scelto di lasciare un commento. Tenga presente che tutti i commenti sono moderati in base alle nostre politica dei commenti e il suo indirizzo e-mail NON sarà pubblicato. Si prega di NON utilizzare parole chiave nel campo del nome. Avremo una conversazione personale e significativa.