Você já se perguntou como pode limitar os resultados da pesquisa a tipos de posts específicos? Não é muito difícil. Já mostramos a você como desativar o recurso de pesquisa no WordPress modificando o arquivo functions.php. Agora faremos a mesma coisa, só que para filtrar os resultados da pesquisa.
Abra seu arquivo functions.php e adicione os seguintes códigos:
function searchfilter($query) { if ($query->is_search && !is_admin() ) { $query->set('post_type',array('post','page')); } return $query; } add_filter('pre_get_posts','searchfilter');
Observe a linha que diz
$query->set('post_type',array('post','page'));
Você pode filtrar os resultados da pesquisa alterando os valores na variável de matriz. No momento, ela está definida para exibir posts e páginas, mas você pode modificá-la para exibir o que quiser.
Syed Balkhi
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!
Ankit manandgar
how can i get search results according to post title only?
Anna
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?
Sparsh Goyal
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….
Azamat
Hello,
How can I limit search results for specific post types AND specific custom taxonomy terms?
Steven
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’);
Greg
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
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.
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.
Tadeu
Hi, is it possible to limit search only to title, category and tags of posts?
Sandeep
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.
Jared
Just a note to add to this, you do not need to return $query.
http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Peter
Thanks for the great tip!
WPBeginner Staff
Nick WordPress search functionality is not so great in finding content.
Nick
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?
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
How to limit by specific category? thanks
WPBeginner Support
Sam, please see our guide on how to add taxonomy search filter in WordPress.
Administrador
Hasan Gad Allah
Thank you , i was looking for that code (Y)
Felix
There’s one problem with your snippet:
It limits the search results in the backend, you should wrap it with:
if ( !is_admin() ) {
// snippet
}
bloggingfuture
This is pretty valuable code for WordPress. Thanks!
Alan Hughes
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?
goJohnnyGo
Did you ever get figure how to apply this to specific search bars (not universally)?
Editorial Staff
Yes we have an article here:
https://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
Administrador
scotte_sprott
How can I limit search results to show just pages?
wpbeginner
@scotte_sprott In the array, just keep page and remove posts.