Es reicht, wie wir auf der 404 Seite gesehen haben, ein Aufruf der Funktion get_search_form und schon hat man eine fertige Suche. Die Suchergebnisse werden über die index.php ausgegeben, was nur teilweise dem entspricht was man sich von einer Suchergebnisseite erwartet.
Alternative ist die Ausgabe über eine eigene Seite. Diese muss search.php heißen. Hier kann man eine völlig eigene Gestaltung erstellen. Für unser Template wollen wir aber die gleiche Optik wie bei der index.php. Es sollen aber immer nur Kurzfassungen der Beiträge angezeigt werden. Üblicherweise wird hier das Wordpress Excerpt verwendet (die ersten 55 Wörter eines Beitrags), das ich hier aber auch nicht sehr geeignet finde. Bei Suchergebnissen erwartet man sich eher die Anzeige des Textausschnitts, in dem auch das Suchwort vorkommt.
Zum Glück gibt es hier ein schönes Plugin namens WP Search Extracts, das wir an dieser Stelle als erstes Plugin einsetzen. Einfach hier downloaden, in das Plugin Verzeichnis kopieren und aktivieren. Sieht man sich den Quelltext einer Suchergebnisseite an, so stellt man fest, dass das Plugin das gefundene Suchwort mit einem em tag der klasse search-match umfasst. Also verwenden wir hier noch etwas css um das ganze etwas besser aussehen zu lassen und unsere Suche ist fertig. Nachdem die Suchergbnisseite so genau das ist was ich erwarte, verzichte ich auf die Erstellung einer search.php.
Derzeit gibt es eine Suche nur auf der 404 Seite. Diese war ursprünglich aber auch im Header unten links vorgesehen. Also fügen wir auch ein Formular dort ein. Das von get_search_form ausgegebene Formular ist hier nicht das was wir brauchen und auch CSS hilft nicht weiter. Jetzt gibt es die Möglichkeit eine searchform.php anzulegen in der ein Formular ausgegeben wird. Diese wird dann automatisch verwendet. Davon wollen wir mal Gebrauch machen.
Wenn wir im Codex die get_search_form Funktion ansehen, so steht dort, dass die Funktion in der wp-includes/general-template.php definiert ist. Wenn man diese Datei öffnet kann man sich die Funktionsweise ansehen. Was wir hier machen ist den 2. Teil des Codes zu “stehlen” und in die searchform.php zu kopieren. Das Label streichen wir einfach raus. Unsere searchform.php sieht also so aus:
<?php $form = '<form role="search" method="get" id="searchform" action="' . get_option('home') . '/" > <div> <input type="text" value="' . esc_attr(apply_filters('the_search_query', get_search_query())) . '" name="s" id="s" /> <input type="submit" id="searchsubmit" value="'. esc_attr__('Search') .'" /> </div> </form>'; echo apply_filters('get_search_form', $form); ?>
Jetzt haben wir ein Suchformular ohne Label vorne, das wir in den header einbauen und per css positionieren können. Wer jetzt sehr genau ist, der wird sagen, dass auf der 404-Seite die Suche 2 mal vorkommt, was
1. nicht sehr schön &
2. nicht ganz korrekt ist, weil die id searchform dann 2 mal vorkommt
Nachdem wir aber validen Code wollen blenden wir daher auf der 404 Seite das Suchformular im Header aus.
<?php if (!is_404()) {echo('<div id="search">'); get_search_form(); echo('</div>'); } ?>
Damit haben wir unsere Suche fertig.


Artikel