Czy kiedykolwiek zastanawiałeś się, jak możesz ograniczyć wyniki wyszukiwania do konkretnych typów postów? To nie jest trudne. Pokazaliśmy już, jak wyłączyć funkcję wyszukiwania w WordPressie modyfikując plik functions.php. Teraz zrobimy to samo, ale zamiast tego będziemy filtrować wyniki wyszukiwania.
Otwórz plik functions.php i dodaj następujące kody:
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type',array('post','page'));
}
return $query;
}
add_filter('pre_get_posts','searchfilter');
Zwróć uwagę na linię, która mówi
$query->set('post_type',array('post','page'));
Możesz filtrować wyniki wyszukiwania, zmieniając wartości w zmiennej tablicy. Obecnie jest ustawiona na wyświetlanie postów i stron, ale możesz ją zmodyfikować, aby wyświetlała cokolwiek chcesz.


Ankit manandgar
jak mogę uzyskać wyniki wyszukiwania tylko według tytułu posta?
Anna
Dzięki za ten kod – działał, chociaż ostatnio był aktualizowany w 2013 roku! Mój motyw również używa wyszukiwania błyskawicznego i chciałbym tam ograniczyć wyniki. Jak mógłbym to zrobić?
Sparsh Goyal
Mój obecny motyw pokazuje posty z kilkoma początkowymi liniami dla wyszukiwanego terminu/słowa. Chcę go dostosować, aby pokazywał akapit zawierający wyszukiwany termin/słowo w skrócie posta. Innymi słowy, chcę pokazać powiązany tekst w skrócie posta, a nie początkowy akapit w wynikach wyszukiwania. Czy ktoś może mi w tym pomóc…
Azamat
Witam,
Jak mogę ograniczyć wyniki wyszukiwania dla konkretnych typów postów I konkretnych terminów niestandardowych taksonomii?
Steven
Mam prostą funkcję w pliku functions.php mojego motywu, która powinna filtrować tylko Posty według terminu wyszukiwania… kiedy teraz czegoś szukam, pojawia się błąd HTTP 500 „Witryna nie może wyświetlić strony”. Czy ktoś ma pomysł, co jest nie tak z moją funkcją?
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
To ogranicza wszystkie formularze wyszukiwania do niestandardowego typu wpisu – w tym mój formularz wyszukiwania na pasku bocznym, który musi zwracać wszystkie wyniki. To działa dla mnie:
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
Dzięki za pomoc, ulepszyłem twój kod, aby ludzie mogli wyszukiwać tylko dozwolone typy postów.
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.
Jak to jest zaimplementowane? Jeśli dobrze rozumiem komentarz Grega, chcemy pojedynczy formularz, który jest ograniczony do typu posta, zachowując jednocześnie domyślne wyszukiwanie dla innych obszarów strony.
Pytam, ponieważ strona, nad którą pracuję, potrzebuje przeszukiwalnej „Biblioteki Zasobów”, którą chciałbym zbudować bez kompromisów w normalnej funkcjonalności wyszukiwania.
Tadeu
Cześć, czy jest możliwe ograniczenie wyszukiwania tylko do tytułu, kategorii i tagów postów?
Sandeep
Cześć,
Nie mogę ograniczyć stron w filtrze wyszukiwania.
Potrzebuję tylko wyszukiwania w postach, a nie stronach.
$query->set(‘post_type’,array(‘post’));
To wyświetla również strony.
Jared
Tylko uwaga do tego, nie musisz zwracać $query.
http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Peter
Dzięki za świetną wskazówkę!
Zespół WPBeginner
Nick Funkcjonalność wyszukiwania WordPress nie jest zbyt dobra w znajdowaniu treści.
Nick
Użyłem tego kodu, aby ograniczyć wyniki wyszukiwania do stron, a nie wpisów. Działało w tym zakresie, jednak wydaje się, że przeszukuje tylko nazwy stron, a nie ich zawartość. Na przykład, jeśli użytkownik wyszuka „pricing”, strona „Pricing” zostanie wyświetlona jako wynik, ale jeśli wyszuka „price” lub „cost” (oba słowa znajdują się na stronie „pricing”), nic nie zostanie znalezione. Czy brakuje mi jakiegoś fragmentu kodu?
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
Jak ograniczyć według konkretnej kategorii? dzięki
Wsparcie WPBeginner
Sam, proszę zobacz nasz poradnik, jak dodać filtr wyszukiwania taksonomii w WordPress.
Admin
Hasan Gad Allah
Thank you , i was looking for that code (Y)
Felix
Jest jeden problem z twoim fragmentem kodu:
Ogranicza to wyniki wyszukiwania w backendzie, powinieneś to opakować w:
if ( !is_admin() ) {
// snippet
}
bloggingfuture
To całkiem wartościowy kod dla WordPressa. Dzięki!
Alan Hughes
Więc jak zastosowałbyś to do konkretnego paska wyszukiwania? Nie stosuje to filtra do każdego paska wyszukiwania na Twojej stronie, prawda?
goJohnnyGo
Czy kiedykolwiek dowiedziałeś się, jak zastosować to do konkretnych pasków wyszukiwania (nie uniwersalnie)?
Personel redakcyjny
Tak, mamy artykuł tutaj:
https://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
Admin
scotte_sprott
Jak mogę ograniczyć wyniki wyszukiwania, aby wyświetlały się tylko strony?
wpbeginner
@scotte_sprott W tablicy po prostu zachowaj 'page' i usuń 'posts'.