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

Marc Wagner, Januar 28, 2023

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.

Benutzerbild von Marc Wagner
Marc Wagner

Hi Marc here. I'm the founder of Forge12 Interactive and have been passionate about building websites, online stores, applications and SaaS solutions for businesses for over 20 years. Before founding the company, I already worked in publicly listed companies and acquired all kinds of knowledge. Now I want to pass this knowledge on to my customers.

Ähnliche Beiträge

Comments

Hinterlasse einen Kommentar