Beiträge aus dem Suchergebnis von WordPress ausschließen

Das Ausschließen von Beiträgen oder Seiten kann an verschiedenen Stellen von WordPress eine Anforderung sein; der Ansatz ist oft der gleiche und daher hier ein kleines Beispiel zum Ausschließen der Inhalte bei der Suche und eine Ergänzung um alle Child-Pages ebenso auszuschließen.

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 7 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Nicht immer wird im Frontend oder Backend von WordPress alles erwünscht, was an Beiträgen oder Seiten vorhanden ist. Diese Anforderung kann man beliebig mit verschiedenen Bedingungen verknüpfen. Als Beispiel dient hier die Filterung der Suche im Frontend. Dabei setze ich einen Filter auf den Query von WordPress und nehme entsprechenden Beiträge oder Seiten aus der Suche raus.

Dabei wir über die ID des Beitrags oder Seite ausgeschlossen, so dass der Parameter ob page oder post irrelevant ist, es gilt nur die ID, die man in einem Array mitgibt und so mehrere Beiträge oder Seiten ausschließen kann.

Im ersten Code-Beispiel wird der Filter angesprochen und im Array zum query werden die IDs gesetzt. Die Filterung wirkt nur wenn es sich um die Suche is_search handelt und man nicht ! im Backend is_admin ist.


// search filter
function fb_search_filter($query) {
	
	if ( !$query->is_admin && $query->is_search) {
		$query->set('post__not_in', array(40, 9) ); // id of page or post
	}
	
	return $query;
}
add_filter( 'pre_get_posts', 'fb_search_filter' );

Möchte man bei der Verwendung der Seiten die Kinder-Seiten ebenso mit ausschließen, so kann man diese zu der ID zusammen suchen und ebenfalls von der Suche ausschließen.


// search filter
function fb_search_filter($query) {

	if ( !$query->is_admin && $query->is_search) {
		$pages = array(2, 40, 9); // id of page or post
		// find children to id
		foreach( $pages as $page ) {
			$childrens = get_pages( array('child_of' => $page, 'echo' => 0) );
		}
		// add id to array
		for($i = 0; $i < sizeof($childrens); ++$i) {
			$pages[] = $childrens[$i]->ID;
		}
		$query->set('post__not_in', $pages );
	}

	return $query;
}
add_filter( 'pre_get_posts', 'fb_search_filter' );

Die Möglichkeiten sind sehr vielfältig und oft hilft ein kleiner Anstoß, den ich hier hoffentlich geben kann, da ich auf meiner Suche nichts gefunden habe. Weitere Parameter des Query sind im zugehörigen Codex dokumentiert.

Kommentare sind geschlossen.