WordPress-Kenner wissen, dass der URL-Parameter „s“ für eine Suche auf der Website ist. Standardmäßig findet die Suchfunktion alles, was sich auf Eurer Website an Inhalten verbirgt. Auch „Custom Post Types“ werden in die Suche einbezogen. Dem URL-Parameter wird ein Wert hinzugefügt, der dem Suchwort entspricht (s=suchbegriff). Fügt Ihr keinen Wert (s=) hinzu gibt die Suche die kompletten Inhalte einer Website aus. In den meisten Fällen wollt Ihr das natürlich nicht. Insbesondere dann, wenn Ihr unverlinkte Testseiten angelegt habt, oder noch Templates von Euren Demoimporten in Eurer WordPress Installation verweilen.
Inhalt
Die WordPress Suchfunktion über den URL-Parameter ausführen
Auch wenn kein Suchformular auf der Website dargestellt wird, könnt Ihr auf einer WordPress Website an die Domain /?s= anhängen (www.deine-website.de/?s=) und dann Enter drücken. Man darf gespannt sein, was sich alles auf diversen WordPress Websites verbirgt. Ihr wollt natürlich nicht blank ziehen. Deswegen könnt Ihr mit einem kleinen PHP-Script einen Filter in Eurer functions.php definieren, der die Suche ausschließlich auf gewünschte „Post Types“ beschränkt. Welche Standard Post Types es in WordPress gibt, findet Ihr hier.
PHP-Code für die functions.php Eures WordPress Themes
/** * Exclude 'post types' from search */ function limitSearchFunction($query) {
if ( $query->is_main_query() ) {
if ( $query->is_search ) {
$query->set( 'post_type', array('post','another-post-type') );
}
}
}
add_filter( 'pre_get_posts','limitSearchFunction' );
In diesem Code Snippet modifizieren wir die Suchfunktion von WordPress durch den Hook „pre_get_posts„. Anstatt die Suche auf die Post Types „posts“ und „pages“ zu beziehen (WordPress Standard), ändern wir die Zuordnung eines Post Types für die Suchfunktion mit der Anweisung $query->set ( ‚post_type‘, ‚post‘ ). Diese Originalzeile aus dem Beispiel in der WordPress Entwickler Referenz fügt den Post Type „Post“ der Suche hinzu. Da wir flexibel bleiben wollen und eventuell weitere Post Types in der Suche mit einbeziehen wollen, wurde hier der „Post Type“ durch einen Array ersetzt, über den wir beliebig viele Post Types in die Suche einbeziehen können. Weitere Post Types oder Custom Post Types werden nach einem Komma in einfachen Anführungszeichen (Single Quotes) hinzugefügt. Der Array wird nach dem letzten schließenden Single Quote mit einer runden Klammer geschlossen.
Nach dem letzten Post Type im Array kommt kein Komma mehr:
$query->set( 'post_type', array('post','another-post-type','add-more','add-custom-post-types') );
Falls Ihr die WordPress Suchfunktion gar nicht benötigt und komplett deaktivieren wollt, könnt Ihr den folgenden Code in die functions.php Eures Themes kopieren.
Mit diesem Code deaktiviert Ihr die Suche von WordPress komplett
/** * Disable search */ function disable_search ( $query, $error = true ) { if ( is_search() ) { $query->is_search = false; $query->query_vars[s] = false; $query->query[s] = false; if ( $error == true ) $query->is_404 = false; } } add_action( 'parse_query', 'disable_search' ); add_filter( 'get_search_form', create_function( '$a', "return null;" ) ); function remove_search_widget() { unregister_widget('WP_Widget_Search'); } add_action( 'widgets_init', 'remove_search_widget' );
Hat Euch das geholfen? Welche Post Types wollt Ihr nicht in Eurer Suche sehen? Schreibt es in die Kommentare.
0 Comments