Wir alle wissen, dass die standardmäßige WordPress-Suchfunktion nicht sehr gut oder zumindest nicht so gut wie Google ist 🙂 , aber es gibt ein paar Tricks, um die Suchergebnisse zu verbessern. Dieser Beitrag zeigt Ihnen verschiedene Methoden zum Einschränken Ihrer Suchergebnisse auf bestimmte Beitragstypen oder Kategorien und wie Sie die Standardanzahl oder die Suchergebnisse pro Seite ändern können.
Begrenzen Sie die WordPress-Suchergebnisse nach Kategorie
Hier sind einige Methoden, mit denen Sie Ihre Suchergebnisse nach Kategorie einschränken können, was für Websites wie Themelocal.com sehr nützlich sein kann, die Abschnitte wie Themen, Plugins und den Blog haben.
1. Ein verstecktes Eingabefeld in Ihrer Searchform.php verwenden
Dies ist die Methode, die ich derzeit auf Themelocal.com verwende. Wenn Leute also die Hauptseite durchsuchen, erhalten sie nur Suchergebnisse aus der Kategorie „WordPress-Themen“. Alles, was Sie tun müssen, ist, Ihrer searchform.php eine versteckte Eingabe mit einer ID von „cat“ und der Kategorie-ID für den Wert hinzuzufügen.
Eine einfache searchform.php
<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<input type="text" size="16" name="s" value="Search" />
<input type="submit" value="Go" />
</form>
Fügen Sie Folgendes hinzu, um die Kategorie mit der ID 5 einzuschränken
<input type="hidden" name="cat" id="cat" value="5" />
Vollständiger Code
<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<input type="hidden" name="cat" id="cat" value="5" />
<input type="text" size="16" name="s" value="Search" />
<input type="submit" value="Go" />
</form>
2. Hinzufügen einer Abfrageanweisung zu Ihrer Search.php-Datei
Eine weitere nützliche Methode, um Ihre Suchergebnisse auf bestimmte Kategorien einzuschränken, besteht darin, Ihrer search.php-Datei direkt vor der if-Anweisung eine Abfrage hinzuzufügen.
Kategorien in die Suche einbeziehen
Indem Sie positive IDs in der Abfrage verwenden, können Sie festlegen, welche Kategorien Sie in Ihren Suchergebnissen anzeigen möchten (Kategorien mit den IDs 1,2 und 3 anzeigen).
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts( "s=$s&paged=$paged&cat=1,2,3" );
?>
Kategorien von der Suche ausschließen
Alternativ können Sie negative IDs verwenden, um bestimmte Kategorien von Ihrer Suchseite auszuschließen (schließen Sie die Kategorie mit einer ID von 7 aus).
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts( "s=$s&paged=$paged&cat=-7" );
?>
Seiten von Ihrer Suchseite ausschließen
Im Folgenden finden Sie einige Möglichkeiten, wie Sie Ihre Suchergebnisse einschränken können, um Seiten aus den Ergebnissen auszuschließen und nur Beiträge anzuzeigen.
Verwenden einer Funktion
Fügen Sie einfach die folgende Funktion in Ihre functions.php-Datei ein
// Remove pages from search results
function exclude_pages_from_search( $query ) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( 'post_type', 'post' );
}
}
add_filter( 'pre_get_posts','exclude_pages_from_search' );
Verwendung einer Bedingung in Ihrer Search.php-Datei
Eine andere Möglichkeit, Seiten aus Ihrer search.php-Datei zu entfernen, besteht darin, direkt nach „while ( have_posts())“ eine Bedingung in Ihre search.php-Datei einzufügen. Dies wird nicht empfohlen, wenn Sie ein Design eines Drittanbieters verwenden, da Sie Ihre Änderungen verlieren, wenn Sie das Design in Zukunft aktualisieren. Wenn es sich um Ihr eigenes benutzerdefiniertes Design handelt, ist dies in Ordnung.
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
// Exclude pages from the loop.
if ( is_search() && ( $post->post_type=='page' ) ) {
continue;
}
?>
Schließen Sie eine oder mehrere bestimmte Seiten aus
Sie können auch bestimmte Beiträge/Seiten von Ihren Suchergebnisseiten anhand ihrer IDs ausschließen, indem Sie den folgenden Code verwenden, der in der Datei functions.php hinzugefügt wird. Ändern Sie einfach das ID-Array so, dass es die IDs der Seiten oder Beiträge enthält, die Sie ausschließen möchten.
// Exclude specific posts/pages from search
function myprefix_exclude_pages_from_search( $query) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$exclude_ids = array( 7, 19 , 21 ); // Array of the ID's to exclude
$query->set( 'post__not_in', $exclude_ids );
}
}
add_filter( 'pre_get_posts', 'myprefix_exclude_pages_from_search' );
Suche auf Beitragstyp beschränken
Einer der Gründe für die Verwendung von Porttypen in WordPress ist, dass Sie diese nicht in Ihrem Feed oder Ihrer Haupt-WP-Schleife haben möchten, weshalb sie perfekt für Dinge wie Schieberegler, Testimonials, Dienste usw. sind. Ihre benutzerdefinierten Beiträge werden jedoch möglicherweise weiterhin auf Ihrer Suchergebnisseite angezeigt.
1. Schließen Sie einen benutzerdefinierten Beitragstyp aus den Suchergebnissen aus
Alles, was Sie tun müssen, um benutzerdefinierte Beiträge aus den Suchergebnissen auszuschließen, ist das folgende Argument festzulegen, wenn Sie Ihren benutzerdefinierten Beitrag definieren (Mehr Info):
'exclude_from_search' => true
2. Verwenden eines versteckten Felds im Suchformular, um nur Beiträge eines bestimmten benutzerdefinierten Beitragstyps anzuzeigen
Alternativ können Sie ein verstecktes Feld in Ihrem Suchformular auf die gleiche Weise verwenden, wie Sie es zum Einschränken von Kategorien getan haben, wenn Sie ein erweitertes Suchformular einrichten möchten, das nur den angegebenen benutzerdefinierten Beitragstyp durchsucht.
<input type="hidden" name="post_type" value="portfolio" />
Dieses zusätzliche Feld würde in Ihr Suchformular eingefügt, und Sie würden einfach die Stelle, an der „Portfolio“ steht, durch Ihren eigenen benutzerdefinierten Namen für den Beitragstyp ersetzen. Diese Methode ist großartig, wenn Sie einen bestimmten Abschnitt auf Ihrer Website haben, der benutzerdefinierte Beitragstypen verwendet, und Sie möchten, dass Benutzer nur diese bestimmten Beiträge durchsuchen können.
Ändern der Anzahl der Ergebnisse pro Seite
Standardmäßig verwendet WordPress die unter definierte Nummer Einstellungen > Lesen (Blogseiten zeigen höchstens…), um festzulegen, wie viele Ergebnisse auf der Suchergebnisseite angezeigt werden. Wenn Sie mehr, weniger oder unendlich viele Ergebnisse auf Ihrer Suchseite anzeigen möchten, können Sie dies mit dem folgenden Code tun:
// Alter search posts per page
function myprefix_search_posts_per_page( $query) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( 'posts_per_page', '10' );
}
}
add_filter( 'pre_get_posts', 'myprefix_search_posts_per_page' );
Dieser Code würde in Ihre functions.php-Datei eingefügt werden. Vorzugsweise in deinem Child-Theme, wenn du mit einem Theme eines anderen Entwicklers arbeitest. Der Code setzt Ihre Suchergebnisse auf „10“ pro Seite. Sie können die Nummer beliebig ändern. Um Ihre Suchergebnisse unbegrenzt zu machen, verwenden Sie -1. Oder verwenden Sie ein Plugin wie Toolset-Suche Paginierung zu Ihren Ergebnissen hinzuzufügen.
Erweiterte/bessere Suche
WordPress sucht standardmäßig nach Inhalten in Ihren Beiträgen und Seiten. Es wäre möglich, die Art und Weise, wie die Suche funktioniert, über Funktionen zu ändern, aber es ist ziemlich komplex. Wenn Sie also die Art und Weise ändern möchten, wie die Suche tatsächlich funktioniert (wonach sie sucht), können Sie stattdessen ein Plugin wie das verwenden WP Erweiterte Suche Plugin. Klicken Sie auf das Banner unten, um es auszuprobieren, oder suchen Sie in Ihrem WordPress-Dashboard darunter danach Plugins > Neu hinzufügen.
Mit diesem Plugin können Sie die Standardsuche besser steuern, wenn Sie nach Metadaten, Kategorien, Tags, Begriffen, Titel usw. suchen möchten. Sie können bestimmte Beitragstypen von der Suche einschließen oder ausschließen, Beiträge ausschließen, die älter als ein bestimmtes Datum sind, die Anzahl der in den Suchergebnissen angezeigten Elemente ändern und vieles mehr!