Har du någonsin undrat hur du kan begränsa dina sökresultat till specifika inläggstyper? Det är inte särskilt svårt. Vi har redan visat dig hur du inaktiverar sökfunktionen i WordPress genom att ändra functions.php-filen. Nu ska vi göra samma sak, fast för att filtrera våra sökresultat.
Öppna din functions.php-fil och lägg till följande kod:
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type',array('post','page'));
}
return $query;
}
add_filter('pre_get_posts','searchfilter');
Lägg märke till raden som säger
$query->set('post_type',array('post','page'));
Du kan filtrera sökresultaten genom att ändra värdena i arrayvariabeln. Just nu är den inställd för att visa inlägg och sidor, men du kan ändra den för att visa vad du vill.


Ankit Manandgar
hur kan jag få sökresultat endast enligt inläggstitel?
Anna
Tack för den här koden – den fungerade, även om du senast uppdaterade 2013! Mitt tema använder också en omedelbar sökning och jag skulle vilja begränsa resultaten där också. Hur skulle jag kunna göra det?
Sparsh Goyal
Mitt nuvarande tema visar inlägg med några inledande rader för söktermen/ordet. Jag vill anpassa det för att visa det stycke som innehåller söktermen/ordet i inläggets utdrag. Med andra ord, jag vill visa relaterad text i inläggets utdrag, inte det inledande stycket i sökresultaten. Kan någon hjälpa mig med detta....
Azamat
Hej,
Hur kan jag begränsa sökresultaten för specifika inläggstyper OCH specifika anpassade taxonomitermer?
Steven
Jag har en enkel funktion i min temas functions.php-fil, som bara ska filtrera inläggen efter en sökterm... när jag nu söker något, visas HTTP 500-felet "Webbplatsen kan inte visa sidan". Någon som har en idé om vad som är fel med min funktion?
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
Detta begränsar alla sökformulär till den anpassade inläggstypen – inklusive mitt sidofältssökformulär, som behöver returnera alla resultat. Detta fungerar för mig:
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
Tack för hjälpen, jag förbättrade din kod så att folk bara kan söka tillåtna 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.
Hur implementeras detta? Om jag tolkar Gregs kommentar korrekt vill vi ha ett enda formulär som är begränsat till en inläggstyp, samtidigt som standard sökning behålls intakt för andra delar av webbplatsen.
Jag frågar för att en webbplats jag arbetar på behöver ett sökbart "resursbibliotek", som jag skulle vilja bygga ut utan att kompromissa med den normala sökfunktionaliteten.
Tadeu
Hej, är det möjligt att begränsa sökningen endast till titel, kategori och taggar för inlägg?
Sandeep
Hej,
Jag kan inte begränsa sidor i sökfiltret.
Jag behöver bara söka inom inlägg och inte sidor.
$query->set(‘post_type’,array(‘post’));
Detta visar även sidor.
Jared
Bara en notering att lägga till detta, du behöver inte returnera $query.
http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Peter
Tack för det utmärkta tipset!
WPBeginner Staff
Nick WordPress-sökfunktionaliteten är inte så bra på att hitta innehåll.
Smeknamn
Jag använde den här koden för att begränsa mina sökresultat till sidor, inte inlägg. Det fungerade i det avseendet, men det verkar bara söka i sidnamnen istället för innehållet. Om en användare till exempel söker på ”prissättning” kommer sidan Prissättning att vara ett resultat, men om de söker på ”pris” eller ”kostnad” (som båda är ord på sidan Prissättning) hittas inget. Saknar jag ett kodavsnitt?
emre
Hej,
Jag har en fråga och jag har inte kunnat få en lösning sedan förra månaden.
Jag har massor av kategorier, sidor och omdirigeringar på min blogg så min sökruta hittar många onödiga resultat när du försöker söka efter något. Jag vill anpassa min search.php för endast kategoridelen. Med andra ord, när du söker efter något, bör resultaten endast komma från kategorisektionerna. Så jag kommer att bli av med överflödiga & duplicerade resultat. Mina nuvarande koder är som följer... Snälla hjälp mig
sam
Hur begränsar man efter specifik kategori? tack
WPBeginner Support
Sam, se vår guide om hur du lägger till taxonomifilter i sökningar i WordPress.
Admin
Hasan Gad Allah
Tack, jag letade efter den koden (Y)
Felix
Det finns ett problem med ditt utdrag:
Det begränsar sökresultaten i backend, du bör slå in det med:
if ( !is_admin() ) { // snippet }
bloggingfuture
Detta är ganska värdefull kod för WordPress. Tack!
Alan Hughes
Så hur skulle du tillämpa detta på en specifik sökfält? Det tillämpas inte bara filtret på varje sökfält på din webbplats, eller hur?
goJohnnyGo
Har du någonsin kommit på hur man tillämpar detta på specifika sökfält (inte universellt)?
Redaktionell personal
Ja, vi har en artikel här:
https://014.leahstevensyj.workers.dev/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
Admin
scotte_sprott
Hur kan jag begränsa sökresultaten till att bara visa sidor?
wpbeginner
@scotte_sprott I arrayen, behåll bara page och ta bort posts.