Standardmäßig durchsucht die WordPress-Suchfunktion Beiträge/Artikel und Seiten. Manchmal kann es jedoch sinnvoll sein, nur in Beiträge zu suchen. Zum Beispiel dann, wenn nur Seiten für Sitemap, Impressum und Datenschutzerklärung existieren. Aber auch sonst kann es Sinn machen die Suche nur auf Artikel zu beschränken.
Um die Suche auf WordPress-Beiträge zu beschränken nutzen wir wieder die add_filter-Funktion, die wir schon in vielen anderen hier vorgestellten Snippets genutzt haben. Das nachfolgende Snippet sollte in der functions.php-Datei des WordPress-Themes platziert werden.
1 2 3 4 5 6 7 |
function Suchfilter($query) { if ($query->is_search) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','Suchfilter'); |
Wie immer ein paar Worte zur Erklärung. Mit der add_filter-Funktion setzen wir einen Filter auf das pre_get_posts-Event. Dieses wird ausgelöst, bevor die Artikel bei einer Query (=Anfrage) geladen werden. An dieser Stelle greift nun unsere Suchfilter-Funktion ein, die Folgendes tut.
Zuerst wird überprüft, ob die Anfrage eine Suchanfrage ist ($query->is_search). Wenn dem so ist, wird per set-Methode der Parameter post_type auf den Wert post festgelegt und somit die Anfrage auf Beiträge beschränkt.
Suche auf andere Post-Typen einschränken
Um die Suche auf andere Artikeltypen einzuschränken, muss lediglich in der Zeile mit „$query->set“ statt „post“ ein anderer Artikeltyp angegeben werden. Doch welche Posttypen gibt es überhaupt?
Die möglichen Artikeltypen, die man hier angeben kann, lassen sich ebenfalls mit einem kleinen PHP-Snippet ermitteln. Folgende Code-Zeilen geben alle verfügbaren Posttypen aus.
1 2 |
$artikeltypen = get_post_types(); print_r($artikeltypen); |
Das Snippet lässt sich ebenfalls in der functions.php einbauen, sollte aber sofort nach dem auslesen wieder entfernt werden, da es zu „unschönen“ Darstellungen im Frontend/Theme kommt.