Jeśli korzystasz z wyszukiwarki na swojej stronie WordPress i klikniesz enter, przejdziesz do strony z wynikami wyszukiwania, której adres URL zawiera ciąg ?s=szukana+fraza
. Na stronie pojawią się wpisy, strony, produkty WooCommerce (jeśli korzystasz z wtyczki WooCommerce) itd. Istny miszmasz.
Da się z tym jednak zrobić porządek. Możesz sprawić, że wyszukiwarka wyszuka tylko wpisy. Albo wykluczy konkretne strony z wyszukiwania.
Szukaj tylko wśród wpisów
Poniższy kod ograniczy wyszukiwanie tylko do wpisów. Strony, produkty itp. nie pojawią się w wynikach wyszukiwania. Wklej kod do pliku functions.php w Twoim motywie potomnym.
add_action( 'pre_get_posts', function($query) {
if ( !is_admin() && $query->is_main_query() && $query->is_search ) {
$query->set( 'post_type', 'post' );
}
} );
Szukaj tylko wśród stron
Poniższy kod sprawi natomiast, że WordPress będzie wyszukiwał tylko wśród stron:
add_action( 'pre_get_posts', function($query) {
if ( !is_admin() && $query->is_main_query() && $query->is_search ) {
$query->set( 'post_type', 'page' );
}
} );
Wyklucz konkretne strony z wyszukiwania
Jeśli chcesz, aby WordPress szukał wśród wszystkich rodzajów wpisów, ale pomijał np. stronę kontaktową, użyj takiego kodu:
add_action( 'pre_get_posts', function($query) {
if ( !is_admin() && $query->is_main_query() && $query->is_search ) {
$query->set( 'post__not_in', array(11) );
}
} );
W powyższym przykładzie „11” to ID strony „Kontakt”. Aby wykluczyć więcej strony, dodaj ich ID po przecinku:
add_action( 'pre_get_posts', function($query) {
if ( !is_admin() && $query->is_main_query() && $query->is_search ) {
$query->set( 'post__not_in', array(11, 17, 34) );
}
} );