★ Code Crash ★
Folge #010 –
Ausgewählte Seiten/Beiträge aus Suche ausschließen
In diesem Beitrag möchte ich euch erklären, wie Ihr ausgewählte Seiten oder Beiträge in WordPress aus der internen Suche auszuschließen könnt.
Als Betreiber einer Webseite mit WordPress hat man manchmal das Problem, dass man Inhalte anlegt, die für andere Unterseiten oder ähnlichem die Inhalte bereitstellen sollen, jedoch in der internen Suche von WordPress nicht auftauchen sollen. Für dieses Problem gibt es eine recht einfach Lösung. Über die Datei ‚functions.php‚ im Verzeichnis eures Themes könnt Ihr dieses Problem angehen.
Es gibt dabei mehrere Varianten, mit denen man das Problem beheben kann. Ich werde in diesem Beitrag die meiner Meinung nach nützlichsten Varianten präsentieren.
Variante 1 – Auschliessen einzelner Beitrags- oder Seiten-ID’s
Bei diesem Code-Snippet müsst Ihr jede Seite und jeden Beitrag einzeln in die Liste in Zeile 3 eintragen. Solltet Ihr keine größeren Mengen an Seiten haben, die Ihr aus der internen Suche ausschließen möchtet, könnte dieser Snippet genau das richtig für euch sein.
Folgender Code muss in die Datei ‚functions.php‘ eingefügt werden:
function wp_exlude_search_filter( $query ) { if ( $query->is_search ) { $query->set('post__not_in', array(1,2,3) ); } return $query; } add_action( 'pre_get_posts', 'wp_exlude_search_filter' );
Innerhalb der Zeile 3 könnt Ihr dann die einzelnen Seiten-ID’s eintragen – jeweils mit einem Komma getrennt.
Variante 2 – Auschließen von Beiträgen innerhalb einer Kategorie
Bei dieser Variante müsst ihr lediglich eine Kategorie im WordPress anlegen und die Kategorie-ID eintragen. Alle Beiträge, die diese Kategorie besitzen sind nun aus der internen Suche ausgeschloßen.
Folgender Code muss in die Datei ‚functions.php‘ eingefügt werden:
function wp_exlude_search_filter( $query ) { if ( $query->is_search ) { $query->set('cat','-123,-456'); } return $query; } add_action( 'pre_get_posts', 'wp_exlude_search_filter' );
Wie in dem vorherigen Code-Snippet könnt Ihr in der Zeile 3 die Kategorie ID’s eintragen, jeweils mit Komma getrennt. Um Kategorien auszuschließen müssen die ID’s mit einem Minus (-) eingetragen werden. Wenn Ihr nur Beiträge aus einer bestimmten Kategorie in der internen Suche anzeigen lassen wollt, könnt Ihr das Minus-Zeichen weg lassen.
Variante 3 – Suchergebnisse nur für Besucher anpassen
Dieses Code-Snippet ermöglicht euch, die interne Suche nur für Besucher anzupassen. Solltet Ihr eine Suche in eurem WordPress-Backend durchführen, würde die interne Suche ohne Einschränkungen arbeiten.
Folgender Code muss in die Datei ‚functions.php‘ eingefügt werden:
function wp_exlude_search_filter( $query ) { if (!$query->is_admin && $query->is_search) { $query->set('cat','-123,-456'); } return $query; } add_action( 'pre_get_posts', 'wp_exlude_search_filter' );
Die Zeile 2 wurden dazu angepasst und prüft, ob Ihr euch im Backend oder im Frontend der Webseite befindet.
Variante 4 – Nur Beiträge in der Suche anzeigen lassen
Die letzte Variante begrenzt die interne Suche auf Beiträge. Normale Inhaltsseiten werden bei der Suche nicht mehr berücksichtigt.
Folgender Code muss in die Datei ‚functions.php‘ eingefügt werden:
function wp_exlude_search_filter( $query ) { if ( $query->is_search ) { $query->set('post_type', 'post'); } return $query; } add_action( 'pre_get_posts', 'wp_exlude_search_filter' );
Kombinieren von Filtern-Befehlen
Die einzelnen Anweisungen können nach den eigenen Bedürfnissen frei kombiniert werden.
Beispielsweise könnte man die Suche auf Beiträge beschränken und zusätzlich die Beiträge einer Kategorie ausschließen.
Das würde dann wie folgt aussehen:
function wp_exlude_search_filter( $query ) { if ( $query->is_search ) { $query->set('post_type','post'); $query->set('cat','-143'); } return $query; } add_action( 'pre_get_posts', 'wp_exlude_search_filter' );
Plugin-Empfehlung zur Ermittlung der Beitrags-ID/Seiten-ID
Für diejenigen, die bei der Suche nach der Seiten-ID/Beitrags-ID Probleme haben empfehle ich euch das WordPress-Plugin ‚Reveal IDs‘.
Dieses fügt in die Auflistung von Beiträgen und Seiten eine neue Spalte hinzu, in der die entsprechende ID steht, die ihr in das Code-Snippet eintragen müsst.
Download von Reveal IDs auf wordpress.org