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

Marc Wag­ner

Juni 21, 2022

2 min read|

Häu­fig benö­tigt man nicht alle Post Types in der Suche, oder möch­te sei­nen Besu­chern nur eine Aus­wahl zur Ver­fü­gung stel­len. Da kann es recht hilf­reich sein wenn man weiß wie man das gan­ze umsetzt.

In der fol­gen­den Anlei­tung zei­ge ich euch zwei Wege, Post Types aus der Suche aus­zu­schlie­ßen.

exclude_from_search #

Die­se Vari­an­te ist hilf­reich, wenn du eige­ne Post Types erstellst oder aber gan­ze Post Types dau­er­haft aus der Suche aus­schlie­ßen möch­test. Hier­zu fügst du beim Anle­gen dei­nes Post Types die Ein­stel­lung “exclude_from_search” hin­zu.

'exclude_from_search' => true

Eben­so ein­fach las­sen sich Post Types von der Suche aus­schlie­ßen, die über ein exter­nes Plug­in instan­zi­iert wur­den. Hier­für hin­ter­legst du in dei­nem Child The­me ein­fach das fol­gen­de Snip­pet 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 wer­den alle Bei­trä­ge, die dem Post Type zuge­ord­net wur­den, aus den Such­ergeb­nis­sen ent­fernt. Dies kannst du für belie­big vie­le Post Types wie­der­ho­len.

pre_get_posts #

Alter­na­tiv zu der Vari­an­te von oben kön­nen wir auch die Word­Press Query direkt mani­pu­lie­ren. Dadurch wer­den nur Post Types gesucht die wir expli­zit ange­ben. Dazu ver­wen­den wir fol­gen­den Fil­ter:

  • pre_get_posts

Fol­gen­des PHP Snip­pet ver­an­schau­licht wie die Such-Query anpas­sen 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 ein­fügst, wer­den nur noch die Bei­trä­ge & Sei­ten vom Post Type “docs”, “page” und “post” durch­sucht.

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Hal­lo, Marc hier. Ich bin der Grün­der von Forge12 Inter­ac­ti­ve und bereits seit über 20 Jah­ren lei­den­schaft­lich dabei Web­sei­ten, Online­shops, Anwen­dun­gen und SaaS-Lösun­gen für Unter­neh­men zu ent­wi­ckeln. Vor der Grün­dung habe ich bereits in Bör­sen notier­ten Unter­neh­men gear­bei­tet und mir aller­lei Wis­sen ange­eig­net. Die­ses Wis­sen möch­te ich nun an mei­ne Kun­den wei­ter­ge­ben.

Hast du eine Fra­ge? Hin­ter­lass bit­te einen Kom­men­tar