Pimp your search – was kannst du mit der WP Suche alles anstellen

was kann die Suche von WP alles Die WP-Suche ist von Haus aus nicht gerade die allerbeste. Dennoch bietet sie viele Möglichkeiten an, die man aber nur dann nutzen sollte, wenn sie wirklich Sinn machen. Ich zeige hier auf, welche Lösungen ich u.a. für folgende Fragen habe.

  1. Wie schafft man es, dass die WP Suche nur aus einer bestimmten Kategorie Suchergebnisse anzeigt.
  2. Kann man auch nur in bestimmen Kategorien suchen lassen.
  3. Kann ich einzelne Kategorien aus allen Suchergebnissen ausschließen.
  4. Kann man seine Seiten aus den Suchergebnissen ausschließen.
  5. Ich hätt gern mehr Suchergebnisse auf der Suchseite angezeigt geht das auch …
  6. u.v.m… :-)

Zuerst zeige ich auf wie man die Suchergebnisse über die functions.php beeinflusst. Dies schont Ressourcen und ändert Dinge dort wo man sie gut wiederfindet. Findige machen sich daraus kleine Plugins, dann haben sie diese Lösungen auch dann noch, wenn das Theme mal gewechselt wird. Doch so ein Plugin daraus zu machen ist eine andere Geschichte.

Hier gibts schnelle und einfache Lösungen für die Suche in WordPress => wer sich Plugins dafür schreiben kann, braucht dies nicht unbedingt hier :-)

Außerdem zeige ich dann noch wie man die SucheForm derart ändert, dass man eine Suche in Kategorien anbieten kann, so der User es möchte.

Einzelne Kategorien aus den Suchergebnissen ausschließen

Du brauchst dazu die functions.php des verwendeten Themes und eine Texteditor.

Die IDs der auszuschließenden Kategorien findest Du so:
Admincenter//Dashboard ==> Artikel==> Kategorien => mit der Maus über den Kategorienamen und in der Statuszeile des Browsers die ID auslesen.

//mts Kategorien aus den Suchergebnissen raus
add_action( 'pre_get_posts', 'mts_exclude_category_from_search' );
function mts_exclude_category_from_search( $query ) {
	
	if( $query->is_main_query() && !is_admin() && $query->is_search() ) {
		$query->set( 'cat', '-ID,-ID,-ID' );
	}

}

IDs in aufsteigender Reihenfolge angeben.

Suchergebnisse nur aus ganz bestimmten Kategorien anzeigen lassen.

Du brauchst wieder die functions.php, einen Texteditor und die IDs der Kategorien.

//mts Suchergebnisse nur aus Kat a und b oder auch c
add_action( 'pre_get_posts', 'mts_include_category_search' );
function mts_include_category_search( $query ) {
	
	if( $query->is_main_query() && !is_admin() && $query->is_search() ) {
		$query->set( 'cat', 'ID,ID,ID' );
	}

}

Ich möchte keine Seiten in den Suchergebnissen haben, sondern nur Artikel

Diesmal brauchst Du nur die functions.php des verwendeten Themes und einen Texteditor :-)

//mts nur Artikel in den Suchergebnissen 
add_action( 'pre_get_posts', 'mts_only_articles_in_search' );
function mts_only_articles_in_search( $query ) {
	
	if( $query->is_main_query() && !is_admin() && $query->is_search() ) {
		$query->set('post_type', 'post');
	}

}

Ich möchte keine Artikel in den Suchergebnissen haben, sondern nur Seiten, da steht das beste drin

Wiederum ist nur die functions.php des verwendeten Themes und ein Texteditor nötig :-)

//mts nur Seiten  in den Suchergebnissen 
add_action( 'pre_get_posts', 'mts_only_pages_in_search' );
function mts_only_pages_in_search( $query ) {
	
	if( $query->is_main_query() && !is_admin() && $query->is_search() ) {
		$query->set('post_type', 'page');
	}

}

die Kategorien als Suchvorauswahl anbieten

So kann die Suchvorauswahl aussehen

Du tätst deinen Usern gern anbieten, dass sie Kategorien wählen können, wenn sie was bei Dir suchen. Dies ist sehr speziell und manche Zielgruppe verwirrt dies mehr als es hilft. Doch hie und da mag es sinnvoll sein. Daher bringe ich die Lösung.

Dazu gibt es zwei Lösungsmöglichkeiten. Du kannst den template tag get_search_form in der functions.php ändern oder Du erstellst dir dazu ein eigenes searchform.php template.

Ich zeige hier wie man sich eine searchform.php dafür erstellt – einfach , weil ich diese Methode gern mag und verwende, auch wenn sie vielleicht weniger als 1tausendstel Wimpernschlag langsamer sein mag ;)

Mit einem Texteditor speicherst Du Dir eine vorerst leere Seite als searchform.php ab. Danach fügst Du untenstehenden Code ein.

Lädst dieses Template via FTP in den Theme Ordner des verwendeten Themes. WP erkennt dies.

Sollte dein Theme ganz speziell sein,kann dies manchmal nicht funktionieren => einfach den ThemeAutor fragen.

<form role="search" method="get" id="searchform" accept-charset="utf-8" action="<?php echo home_url() ; ?>" >
<label class="screen-reader-text" for="s">Suche nach:</label>
<input type="search"    value=" " name="s" id="s"     required="required"/>
in  <?php wp_dropdown_categories( array(
    'show_option_all'    => 'alles durchsuchen',
    'show_option_none'   => '',
    'orderby'            => 'ID', 
    'order'              => 'ASC',
    'show_count'         => 1,
    'hide_empty'         => 1, 
    'child_of'           => 0,
    'exclude'            => 5,
    'echo'               => 1,
    'selected'           => 1,
    'hierarchical'       => 1, 
    'name'               => 'cat',
    'id'                 => '',
    'class'              => 'postform',
    'depth'              => 0,
    'tab_index'          => 0,
    'taxonomy'           => 'category',
    'hide_if_empty'      => false ));   ?> 
<input   type="submit" id="searchsubmit"   value="Suchen" /></form>

Ich hab die normale Suchform einfach durch den template tag wp_dropdown_categories ergänzt. Dieser bietet viele Einstellungsmöglichkeiten an, die du ganz leicht im Codex- unten verlinkt- nachlesen kannst.

Ich möchte auf der Suchergebnisseite mehr Artikel anzeigen lassen als in den Kategorien

Ich vermut Du weißt schon:functions.php , Texteditor und für heut das letzte Mal ;)

//mts Anzahl der  Suchergebnisse pro Seite  aendern 
add_action( 'pre_get_posts', 'mts_change_searchresults_per_page' );
function mts_change_searchresults_per_page( $query ) {
	
	if( $query->is_main_query() && !is_admin() && is_search(  ) ) {
		$query->set( 'posts_per_page', '20' );
	}

}

Hier lasse ich 20 Artikel als Suchergebnisse anzeigen.

Hilfreiche weiterführende Links

Bei Fragen einfach fragen…

Und war’s hilfreich freu ich mich über’s Weitersagen und ein +1
10

10 Beiträge zu “Pimp your search – was kannst du mit der WP Suche alles anstellen

  1. Kommentar Autor
    Markus
    Kommentar

    Wieder mal klasse Tipps, danke dafür. :-)

    Ergänzend dazu ein Code-Schnipsel für die functions.php, den ich mal drüben bei Frank Bueltge gefunden hab:

    function fb_change_search_url_rewrite() {
        if ( is_search() && ! empty( $_GET['s'] ) ) {
            wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( 's' ) ) );
            exit();
        }
    }
    add_action( 'template_redirect', 'fb_change_search_url_rewrite' );

    Das passt die Adresse der Suchergebnisseite an. Statt http://www.domain.tld/?s=suchbegriff steht in diesem Fall http://www.domain.tld/search/suchbegriff in der Adresszeile. Nettes Gimmick, wie ich fínde.

  2. Kommentar Autor
    Monika
    Kommentar

    das hat Nachteile,
    ich schließe die Suchergebnisse aus dem Google Index aus also per robots.txt

    das geht nicht mehr, wenn der Parameter weg ist und dann füllt man den Google Index mit unnötigen Seiten und fällt dem Panda zum Opfer

  3. Kommentar Autor
    Markus
    Kommentar

    OK, das stimmt. Aber kann man nicht das Verzeichnis „search“ über die robots.txt für die SuMas sperren?

  4. Kommentar Autor
    Markus
    Kommentar

    Wer schaut schon auf ne URL, dann brauch ich keine „sprechenden URLs“ einrichten und kann auf dem Standard ?p=1535 bleiben.

    Aber zum Glück muss man ja nicht alles umsetzen, was möglich wäre ;-)

  5. Kommentar Autor
    Monika
    Kommentar

    nee habe ich so nicht gemeint,
    war wohl zu sehr von der mich besuchenden Katze abgelenkt ;)

    die sprechenden URLs habe ich wegen der besseren Merkbarkeit und weil die Leut in den SUchergebnissen da lieber draufklicken,

    bei den Suchergebnissen auf einer Domain guggt kaum einer auf die URL und bis dato weiß ich, dass hier auf der Texto in ihren ganzen 7Jahren einmal ein Suchergebnis wo verlinkt wurde

    => aber vielleicht geh ich da auch zuviel von mir aus kann alls sein :-)

  6. Kommentar Autor
    Michael Firnkes
    Kommentar

    Danke für die tollen Tipps! Wollte ich gerade per Twitter verteilen, habe ich den Button nur nicht gefunden? Dann eben händisch ;-)

    Grüße, Michael

  7. Kommentar Autor
    Monika
    Kommentar

    danke Dir @ Michael

    nach 2 Jahren Twitter Button => und 6mal wurde er genutzt habe ich ihn in die virtuelle Wüste geschickt ;)

  8. Kommentar Autor
    Michael Firnkes
    Kommentar

    @Monika: Das ist ja seltsam, wie unterschiedlich Twitter auf einzelnen Portalen genutzt wird oder eben auch nicht.. Kostet ja nur zusätzliche Ladezeit dann, klar..

  9. Kommentar Autor
    Monika
    Kommentar

    vielleicht probier ich es wieder => bin da sowieso experimentierfreudig ende nie :-)