WordPress: Suche nur für Beiträge verwenden

Heute gibt es einen Schnellschuss und es dreht sich alles um die Suche bzw. wie man bestehende Queries manipulieren kann, ohne dass man sie vollständig neu schreiben muss. Im heutigen Beispiel verwenden wir den Search-Query von WordPress und bringen WordPress bei, dass nur Beiträge durchsucht werden sollen.

<?php
/**
 * Verändert den Query sofern er für die Suche ist, damit nur noch Beiträge
 * in den Ergebnissen zu sehen sind.
 * 
 * @param WP_Query $query Der globale WP_Query.
 *
 * @return WP_Query
 */
function my_custom_search_query( $query ) {
  /**
   * Hier bringen wir WordPress bei, dass auch wirklich nur der Hauptquery betroffen ist,
   * wenn man nicht im Adminbereich ist und auch nur die Suche verwendet wird.
   */
  if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
    /**
     * Hier legen wir den Inhaltstyp post fest. Man kann man $query->set() auch
     * den Meta-Query anpassen, oder auch das orderby manipulieren. Hier geht
     * alles, was auch mit dem WP_Query im Normalfall geht.
     */
    $query->set( 'post_type', 'post' );
  }
  /**
   * Hier geben wir den manipulierten Query zurück.
   */
  return $query;
}
/**
 * Hier wird unser manipulierter Query an WordPress übergeben.
 */
add_filter( 'pre_get_posts', 'my_custom_search_query' );Code-Sprache: HTML, XML (xml)

Den oben genannten Code, packst du einfach in deine functions.php und er sollte sofort ausgeführt werden. So benötigst du kein extra Plugin dafür und hast auch die vollständige Kontrolle darüber, was wie gemacht werden soll. Plugins neigen häufig dazu, mehr zu machen, als sie sollen.

Wenn du jetzt noch wissen möchtest, wie man eigene Queries schneller macht, kann ich dir ein anderen Beitrag dazu empfehlen. Dort wird beschrieben, wie man dem Query mitteilt, dass nur noch die IDs der Beiträge zurückgegeben werden sollen – was die Queries wesentlich schneller macht. Vor allem wenn man größere Queries baut und im Grunde nur die IDs der einzelnen Beiträge benötigt um bspw. Felder von Advanced Custom Fields auszugeben.