Wenn man aber mit WordPress und Suche die Suchmachine des Vertrauens füttert, bekommt man den Eindruck das es den meisten Anwenndern nicht schnell genug gehen kann, die Suche durch eine andere (per Plugin) zu ersetzen.
Offenbar ist der Grundtenor „Die eingebaute Suche ist Mist, ersetze sie durch $PluginName“. Grund genug einmal zu schauen wie das mit der Suche läuft und ob es wirklich immer ein Plugin braucht.
Viele WordPress Themes haben (häufig im Seitenkopf) einen Suchschlitz, in den das zu suchende Wort eingegeben wird. Das Suchergebnis wird meistens so ausgegeben wie die Auflistung der neusten Beiträge.
Sollte das Theme keinen Suchschlitz ausgeben, so kann man das Such-Widget verwenden in dieses in ein der Sidebars übernehmen. Die Widget-Einstellungen finden sich unter Design/Widgets im WordPress Backend.
Die Widgets auf der linken Seiten werden per Drag&Drop auf die Sidebar gezogen, wo sie zum Einsatz kommen sollen.
Nach Eingabe eine Titels und speichern der Widget-Einstellungen ist in der Sitebar der Seite die Suche verfügbar.
Wo kommt das Formular her?
Der Code für das Suchformular kommt aus der Funktion get_search_form
Dieser Code kommt zum Einsatz, wenn das Theme kein Template für das Suchformular mitbringt. Die locate_template Funkion (Zeile #215 im Screenshot) prüft ob im Theme oder im Childtheme die Datei searchform.php vorhanden ist. Wenn im Theme eine solche Datei vorhanden ist, wird diese verwendet statt des HTML Codes in der get_search_form Funktion.
Das Theme TwentySeventeen Beispielsweise liefert eine searchform.php mit, so das diese verwendet wird, wenn das Theme aktiviert ist.
Suchergebnisse
Laut WordPress Template Hierarchie wird für die Ausgabe der Suchergebnisse die Templatedatei search.php verwendet, sollte diese nicht vorhanden sein wird auf die index.php zurückgegriffen.
Die Suchergebnisse selbst werden von WordPress als Loop zurückgegeben, ebenso wie jede andere Auflistung von Beiträgen.
Suche
Die Suche selbst findet innerhalb der WP_Query Klasse statt, und kann daher mit vielfältigen Möglichkeiten beeinflusst werden.
Mehrere Begriffe in der Suche werden UND verknüpft.
Begriffe mit vorgestellten ‘-‘ werden exkludiert. Das Zeichen kann kann über den Filter wp_query_search_exclusion_prefix verändert werden.
Bereits die eingebaute Suche hat eine Stoppwort-Liste. Die mitgelieferten Stoppworte werden über die Übersetzungsdatei gepflegt. Diese Liste kann über den Filter wp_search_stopwords verändert werden.
Das Suchergebnis ist per default nach dem Veröffentlichungsdatum sortiert. Das kann über den Filter posts_search_orderby verändert werden.
Durchsucht werden die Felder Titel, Auszug und Content. Um weitere Felder zu berücksichtigen kann die Such-Query über den pre_get_posts Filter erweitert werden. Das folgende Codefragment erweitert sie Suche dahingehen das auch das Benuterdefinierte Feld ‘mein_meta_feld’ bei der Suche berücksichtigt wird.
function staude_search_query( $query ) { if ( $query->is_search ) { $meta_query_args = array( array( 'key' => 'mein_meta_feld', 'value' => $query->query_vars['s'] = '', 'compare' => 'LIKE', ), ); $query->set('meta_query', $meta_query_args); }; } add_filter( 'pre_get_posts', 'staude_search_query');
Zusammenfassung
Die eingebaute Suche in WordPress kann einfach angepasst werden und je nach Anwendungsfall ist es nicht immer nötig ein extra Plugin dafür zu verwenden. Möglicherweise lässt sich die Anforderung durch ein paar Zeilen Programmcode in der functions.php des Childthemes schon erfüllen. Wenn allerdings umfangreichere Umbauten oder mächtigere Anforderungen an die Suche gestellt werden, sollte doch nach Plugins ausschau gehalten werden. Gleiches gilt, wenn der Kunde selbst verschiedene Parameter an der Suche verstellen/ausprobieren möchte.