Seiten aus der WordPress-Suche ausschließen

Die interne WordPress-Suche ist vielleicht nicht die stärkste, aber solide genug, wenn es um einfache Webseiten geht. Obwohl es diverse Plugins gibt, um die Suche „aufzupumpen“, belasse ich es daher oft bei der WordPress-eigenen Suchfunktion.

Ein Fall, auf den ich dabei immer wieder stoße, ist die Beeinflussung der Suche bzw. Suchergebnisse. Oftmals statte ich Kunden-Projekte mit einer (halb-)statischen Startseite aus, die zwar im Backend über verschiedene Optionen und Metaboxen befüllt werden kann, als Suchergebnis aber keinen wirklichen Mehrwert bietet, da sie nur andere Seiten-Inhalte zusammenfasst. In der Suche kann es also sinnvoll sein, die Startseite auszuschließen.

Startseite aus der WordPress-Suche ausschließen

Ich nutze dabei das folgende Code-Snippet, das in die functions.php (oder wahlweise ein Plugin, um es auch Theme-unabhängig aktiv zu halten) gehört:

function cr_search_filter( $query ){
	if( $query->is_search && $query->is_main_query() && !is_admin() ){
		$front_page = (array)get_option( 'page_on_front' );
		$query->set( 'post__not_in', $front_page );
	}
}
add_action( 'pre_get_posts', 'cr_search_filter' );

Was tun wir hier? Zunächst klinken wir uns in pre_get_posts ein. Dieser Filter läuft, bevor sich WordPress aus der Datenbank die entsprechenden Post-Informationen holt. In einem if-Statement prüfen wir, ob ein Such-Query läuft, dieser der Haupt-Query ist und wir nicht im Admin-Bereich sind. Daraufhin setzen wir die ID der Startseite in ein Array und schreiben dieses als Wert von post__not_in in die Query-Argumente. Bei der Ausführung schließt dieser dann die entsprechende ID aus der Anfrage aus.

Ähnlich könnte man übrigens auch verfahren, wenn man Kategorien ausschließen wollte. Dazu gibt es das Query-Argument category__not_in.

Einen Kommentar hinterlassen