WordPress-Suchfunktion deaktivieren
Ein Schnipsel für die Fälle, in denen die eingebaute Suche mehr stört als hilft – ohne die Suche im Verwaltungsbereich mit abzuschalten.
Wofür das gut ist
WordPress bringt eine Suche mit, ob man sie will oder nicht. Bei einer Firmenwebsite mit zwölf Seiten stört sie eher: Sie liefert magere Ergebnisse, und Besucher sollen ohnehin über das Menü gehen.
Dazu kommt ein praktischer Grund: Suchergebnisseiten erzeugen endlos
viele Adressen, und automatisierte Anfragen an
/?s=... gehören zu den häufigsten Serverbelastungen bei
kleinen Websites.
Der Schnipsel
add_action( 'parse_query', function ( $query ) {
// Nur im Vorderbereich und nur die Hauptabfrage.
// Ohne diese Prüfung waere auch die Suche in der WordPress-
// Verwaltung abgeschaltet - und ohne die findet man in einer
// gewachsenen Website nichts mehr.
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( $query->is_search ) {
$query->is_search = false;
$query->set( 's', '' );
$query->is_404 = true;
}
} );
// Entfernt das Suchformular, falls das Theme eines ausgibt.
add_filter( 'get_search_form', '__return_empty_string' );
Aufrufe von /?s=irgendwas landen danach auf der
Fehlerseite, und das Suchfeld verschwindet.
Warum ältere Anleitungen die Website lahmlegen
In vielen Anleitungen steht für diese Aufgabe ein Schnipsel mit
create_function(). Diese Funktion ist seit PHP 7.2
abgekündigt und in PHP 8 entfernt. Wer den Code
heute einsetzt, bekommt eine weiße Seite – auch im
Verwaltungsbereich.
Ebenso verbreitet ist $query->query_vars[s] ohne
Anführungszeichen um das s. In PHP 7 war das eine
Warnung, in PHP 8 ebenfalls ein schwerwiegender Fehler.
Beides erkennt man von außen nicht – die Anleitung sieht seriös aus und war es zu ihrer Zeit auch. Der Schnipsel oben ist gegen PHP 8 geprüft.
Wohin der Code gehört
Nicht in die functions.php deines
Themes. Beim nächsten Theme-Update ist er weg – ohne Vorwarnung und
ohne dass jemand merkt, warum die Suche plötzlich wieder da ist.
Richtig sind zwei Orte: ein Child-Theme, oder ein Code-Plugin wie „Code Snippets" oder „WPCode". Bei einem Plugin lässt sich der Schnipsel außerdem mit einem Schalter abschalten, wenn er Ärger macht.
Und vorher: eine
Sicherung anlegen. Ein Tippfehler in PHP-Code hat dieselbe Wirkung
wie ein Tippfehler in der .htaccess – die Seite ist weg.
Geht es auch ohne Code?
Für den häufigsten Wunsch – „das Suchfeld soll weg" – reicht oft schon die Gestaltung: Suchfeld aus dem Menü und aus der Seitenleiste entfernen, fertig. Die Suche bleibt dann technisch erreichbar, aber niemand stolpert darüber.
Der Schnipsel oben ist die gründlichere Fassung: Er schaltet die Funktion selbst ab, nicht nur ihre Anzeige.
Passt das nicht auf deinen Fall?
Dieser Artikel beantwortet die Frage allgemein – deine ist vermutlich konkreter. Schreib mir kurz, worum es geht. Ich antworte selbst, meist am selben Tag, und es kostet nichts.
Hat dir das geholfen?
Dann sag es weiter. Eine kurze Bewertung dauert dreißig Sekunden und sorgt dafür, dass die Nächsten diese Antwort überhaupt finden.
Passt dazu
- Schnipsel Bösartige URL-Anfragen zurückweisen Ein Filter gegen die immergleichen automatisierten Sondierungen – kein Ersatz für eine Firewall, aber auch kein Aufwand.
- Schnipsel Mengenfeld auf der WooCommerce-Warenkorbseite ausblenden Vier Zeilen – mit einer Nebenwirkung, die man kennen sollte, bevor man sie einsetzt.
- Schnipsel Produkt-Metadaten in WooCommerce ausblenden Artikelnummer, Kategorien und Schlagwörter von der Produktseite nehmen – für alle Produkte oder gezielt für einzelne.
- Schnipsel Kostenloses Geschenk ab einer Warenkorbsumme (WooCommerce) Ab 100 Euro ein Geschenk, ab 200 ein größeres – und wieder weg, wenn die Summe darunter fällt.