WordPress Seiten von Suche ausschließen (ohne Plugin)

Sie möchten einzelne WordPress-Seiten bzw. -Pages gezielt von der Suche ausschließen? Kein Problem. Dafür brauchen Sie nur ein paar Code-lines.

Warum sollte ich Seiten von der WordPress-Suche ausschließen?

Eine aktuelle Kunden-Website arbeitet mit Mailing-Listen und der Distribution von digitalen Produkten. Infolge dessen gibt es Bestätigungsseiten bei erfolgter Newsletter-Anmeldung oder Seiten, die den Bezahlprozess begleiten. Selbige können (und sollten) ohnehin mittels SEO-Plugin vom Bot-Zugriff ausgelistet werden (noindex, nofollow, noarchive) – selbiges verhindert aber nicht, dass diese individuellen Seiten bei einer WordPress-internen Suche auftauchen.

Seiten von der WordPress-Suche ausschließen
Nicht jede WordPress-Seite soll in der Suche auftauchen

1. Sicherheit
In der Regel geben diese (Zwischen-)Seiten zwar keine relevanten Informationen oder Interna preis. Je nach Setup kann es aber passieren, dass der User über die WordPress-Suche auf eine fortgeschrittene Payment-Seite gelangt, die Ihm den Download ermöglicht. Ein Schelm wer Böses denkt? Ich könnte es dem (glücklichen) Besucher nicht verdenken, wenn selbiger daraus Vorteil zieht. Schließlich liegt es in der Hand des Betreibers, hier die richtigen Schranken einzubauen bzw. solche Lücken zu schließen.

2. Relevanz
Neben den Sicherheitsaspekten (im Sinne des Website-Betreibers) stellt sich auch die Frage nach der Relevanz der Such-Ergebnisse, wenn dort fünf WordPress-Seiten auftauchen, die lediglich als Bestätigungsseiten oder Zwischenschritte eingerichtet sind. Und auch wenn man schließlich zum gewünschten Inhalt gelangt ist – es bleibt ein fahler Nachgeschmack im Sinne der Usability.

Wie schließe ich Seiten von der WordPress-Suche aus?

Dieser Code fügt einen globalen Search-Filter hinzu. Die individuellen Seiten werden hier als array (nach IDs) ausgeschlossen.

/* SEITEN VON DER WORDPRESS-SUCHE AUSSCHLIESSEN */

function js_search_filter( $query ) {
     	if ( $query->is_search ) { 
			$query->set('post__not_in', array(1,2,3) ); 
		}
     	return $query;
	}
	add_action( 'pre_get_posts', 'js_search_filter' );

Der Code gehört in die functions.php, die sich im Theme-Ordner ([…]/wp-content/themes/) befindet. Einfach Copy & Paste, testen nicht vergessen.

Die jeweiligen Seiten-, Post- bzw. Kategorie-IDs sind mitunter nicht einfach zu ermitteln. Im Backend kann man sich zwar mit einem Mouse-Hover behelfen und dem angezeigten Link die ID entlocken – ich bin aber großer Fan des „Reveal IDs“-Plugins, welches eine Spalte mit Identifikationsnummer in der entsprechenden Rubrik hinzufügt.

WordPress-Suche – Alternativen zur Customization für Posts, Kategorien, etc.

Natürlich kann man diese Funktion auch editieren und mittels der zur Verfügung stehenden Variablen für den Ausschluss von Kategorien, Posts usw. verwenden. Der Code verändert sich nur geringfügig, man tauscht die entsprechenden Zeilen in der obigen Anleitung einfach aus. Hier also einige Beispiele:

A) Nur Artikel/Posts in der Suche anzeigen

$query->set('post_type', 'post'); }

B) Nur Frontend-Zugriffe bearbeiten, Admin Such-Zugriff wird nicht beeinträchtigt

if (!$query->is_admin && $query->is_search) {

C) Einzelne Kategorien von der WordPress-Suche ausschließen

$query->set('cat','-123,-456');

Das (-) sorgt für den Ausschluss der Kategorien aus der Suche. Man kann invers arbeiten und ohne negatives Vorzeichen ausschließlich Artikel aus der Kategorie 123 anzeigen lassen.

D) Es sind auch Kombinationen möglich

$query->set('post_type','post');
$query->set('cat','-143');

In diesem Beispiel wird die WordPress-Suche zuerst auf die Ausgabe von Artikeln/Posts beschränkt, im zweiten Schritt werden noch einzelne Kategorien ausgeschlossen.

Weiterführende Links zum Thema WordPress-Suche