Standardmäßig ist die in WordPress integrierte Suchfunktion relativ einfach gestrickt: Sie zeigt alle Beiträge und andere Inhalte, die zum Suchbegriff passen, absteigend nach dem Veröffentlichungsdatum an.

Die WordPress-Klasse WP_Query, die für diese und andere Anfragen an die WordPress-Datenbank genutzt wird, ist jedoch deutlich mächtiger, und so kann man relativ einfach die eingebaute Suche erweitern: codex.wordpress.org.

Beispielsweise ist es möglich, die Suchergebnisse auch nach ihrer von WordPress ermittelten Relevanz sortieren zu lassen. Hierzu fügt man zuerst folgenden PHP-Code in die functions.php-Datei des aktiven Themes ein:

  1. function order_search_results_by($query) {
  2.     if ($query->is_search) {
  3.         if (isset($_POST["orderby"]) && $_POST["orderby"] == "relevance") {
  4.             $query->set("orderby", "relevance");
  5.             $query->set("order", "DESC");
  6.         } else {
  7.             $query->set("orderby", "date");
  8.             $query->set("order", "DESC");
  9.         }
  10.     }
  11.     return $query;
  12. }
  13. add_filter('pre_get_posts', 'order_search_results_by');

Werbung

Werbeblocker aktiv?

Vermutlich aufgrund eines Werbeblockers kann an dieser Stelle leider keine Werbung angezeigt werden. Als Blog ist diese Website jedoch darauf angewiesen, um diverse Kosten abdecken zu können. Vielleicht möchtest du Servaholics ja in deinem Werbeblocker als Ausnahme hinzufügen und so unterstützen? 🙂

Danach fügt man folgenden HTML-Schnipsel an die Stelle ein, an der ein Dropdown angezeigt werden soll, über das der Nutzer bzgl. der Sortierung der Ergebnisse zwischen Datum und Relevanz entscheiden kann:

  1. <form method="post">
  2.     Sortierung: <select name="orderby" onchange="this.form.submit();">
  3.          <option value="date">Datum</option>
  4.          <option value="relevance" <?php if (isset($_POST['orderby']) && $_POST['orderby'] == 'relevance') { echo "selected"; } ?>>Relevanz</option>
  5.     </select>
  6. </form>

Weitere Anpassungsmöglichkeiten wären bspw. eine Option, die Ergebnisse aufsteigend statt absteigend sortieren zu lassen (über den Parameter order), eine Einstellung, die Ergebnisse nach der Anzahl der Kommentare darunter und damit quasi nach Aktivität zu sortieren (über den Wert comment_count für den Parameter orderby), oder auch eine Einschränkung auf bestimmte Kategorien (z.B. über den Parameter category_name).

Deine Meinung zu diesem Artikel?