So kannst du WordPress Post Types aus der Suche ausschließen!

Häufig benötigt man nicht alle Post Types in der Suche, oder möchte seinen Besuchern nur eine Auswahl zur Verfügung stellen. Da kann es recht hilfreich sein wenn man weiß wie man das ganze umsetzt.

In der folgenden Anleitung zeige ich euch zwei Wege, Post Types aus der Suche auszuschließen.

exclude_from_search #

Diese Variante ist hilfreich, wenn du eigene Post Types erstellst oder aber ganze Post Types dauerhaft aus der Suche ausschließen möchtest. Hierzu fügst du beim Anlegen deines Post Types die Einstellung “exclude_from_search” hinzu.

'exclude_from_search' => true

Ebenso einfach lassen sich Post Types von der Suche ausschließen, die über ein externes Plugin instanziiert wurden. Hierfür hinterlegst du in deinem Child Theme einfach das folgende Snippet ein und ersetzt “name_of_the_post_type” mit dem Namen des Post Types.

/**
 * Exclude Post Type from Search
 */
add_action('init', 'excludePostTypeFromSearch', 99);

function excludePostTypeFromSearch(){
    global $wp_post_types;

    if(post_type_exists('name_of_the_post_type') && isset($wp_post_types['name_of_the_post_type'])){
        $wp_post_types['name_of_the_post_type']->exclude_from_search = true;
    }
}

Nun werden alle Beiträge, die dem Post Type zugeordnet wurden, aus den Suchergebnissen entfernt. Dies kannst du für beliebig viele Post Types wiederholen.

pre_get_posts #

Alternativ zu der Variante von oben können wir auch die WordPress Query direkt manipulieren. Dadurch werden nur Post Types gesucht die wir explizit angeben. Dazu verwenden wir folgenden Filter:

  • pre_get_posts

Folgendes PHP Snippet veranschaulicht wie die Such-Query anpassen kannst:

 public function manipulate_search_query(WP_Query $query):WP_Query
 {
   if (!$query->is_search()) {
     return $query;
   }

   if (is_admin()) {
     return $query;
   }

   // Set the Post Types that should be searched for the keyword.
   $query->set('post_type', array('docs', 'page', 'post'));

   return $query;
 }

/*
 * Filter: pre_get_posts
 */
add_filter('pre_get_posts', 'manipulate_search_query', 10, 1);

Sobald du das Skript einfügst, werden nur noch die Beiträge & Seiten vom Post Type “docs”, “page” und “post” durchsucht.

Hier klicken, um den Beitrag zu bewerten
[Gesamt: 0 Durchschnitt: 0]

Hinterlasse einen Kommentar

Titel