Zaufane samouczki WordPress, kiedy ich najbardziej potrzebujesz.
Przewodnik dla początkujących po WordPressie
WPB Cup
25 milionów+
Witryny korzystające z naszych wtyczek
16+
Lata doświadczenia z WordPressem
3000+
Samouczki WordPress od ekspertów

Jak ograniczyć wyniki wyszukiwania dla określonych typów wpisów w WordPress

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.

Ujawnienie: Nasze treści są wspierane przez czytelników. Oznacza to, że jeśli klikniesz w niektóre z naszych linków, możemy otrzymać prowizję. Zobacz jak finansowany jest WPBeginner, dlaczego to ważne i jak możesz nas wesprzeć. Oto nasz proces redakcyjny.

Ostateczny zestaw narzędzi WordPress

Uzyskaj BEZPŁATNY dostęp do naszego zestawu narzędzi – kolekcji produktów i zasobów związanych z WordPress, które powinien mieć każdy profesjonalista!

Interakcje czytelników

26 CommentsLeave a Reply

  1. 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ć?

  2. 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…

  3. Witam,

    Jak mogę ograniczyć wyniki wyszukiwania dla konkretnych typów postów I konkretnych terminów niestandardowych taksonomii?

  4. 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’);

  5. 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’);

    • 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’);

      • 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.

  6. Cześć, czy jest możliwe ograniczenie wyszukiwania tylko do tytułu, kategorii i tagów postów?

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

  8. 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?

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

  10. Jest jeden problem z twoim fragmentem kodu:

    Ogranicza to wyniki wyszukiwania w backendzie, powinieneś to opakować w:


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

  11. Więc jak zastosowałbyś to do konkretnego paska wyszukiwania? Nie stosuje to filtra do każdego paska wyszukiwania na Twojej stronie, prawda?

Zostaw odpowiedź

Dziękujemy za pozostawienie komentarza. Pamiętaj, że wszystkie komentarze są moderowane zgodnie z naszą polityką komentowania, a Twój adres e-mail NIE zostanie opublikowany. Prosimy NIE używać słów kluczowych w polu nazwy. Prowadźmy osobistą i znaczącą rozmowę.