Dieses Tutorial ist ein Folgebeitrag zu meinem Beitrag über den Ausschluss von Seiten aus den WordPress-Suchergebnissen.
In diesem Tutorial lernen Sie, wie Sie benutzerdefinierte Beitragstypen in die WordPress-Suchergebnisse aufnehmen können, indem Sie die Hauptabfrage über die pre_get_posts
Haken.
Wichtigste Erkenntnisse
- Standardmäßig werden benutzerdefinierte Beitragstypen nicht in die WordPress-Suchergebnisse aufgenommen.
- In diesem Schritt-für-Schritt-Tutorial werden Sie eine Funktion erstellen, mit der sie von WordPress abgefragt, durchsucht und angezeigt werden können.
Einrichten der Funktion zur Aufnahme von benutzerdefinierten Beitragstypen in die WordPress-Suchergebnisse
Öffnen Sie Ihr functions.php
und fügen Sie den folgenden Text ein:
/**
* This function modifies the main WordPress query to include an array of
* post types instead of the default 'post' post type.
*
* @param object $query The main WordPress query.
*/
function tg_include_custom_post_types_in_search_results( $query ) {
if ( $query->is_main_query() && $query->is_search() && ! is_admin() ) {
$query->set( 'post_type', array( 'post', 'movies', 'products', 'portfolio' ) );
}
}
add_action( 'pre_get_posts', 'tg_include_custom_post_types_in_search_results' );
Diese Funktion filtert einfach unsere Suchergebnisse, indem sie den Abfrageergebnissen neue Argumente hinzufügt. Wie Sie oben sehen können, gibt die folgende Funktion Inhalte aus jedem dieser benutzerdefinierten Beitragstypen zurück: post
, movies
, products
und portfolio
.
Ändern und/oder löschen Sie einfach die Namen der benutzerdefinierten Beitragstypen im Array, damit sie mit den benutzerdefinierten Beitragstypen übereinstimmen, die Sie in Ihre WordPress-Suchergebnisse aufnehmen möchten.
Möchten Sie eine WordPress-Website, die sicher UND schnell ist? Meine Freunde bei WP Engine bieten 3 Monate kostenlos auf alle Jahrespläne. Klicken Sie hier, um Ihr spezielles WP Engine-Angebot in Anspruch zu nehmen!
Da haben Sie es - jetzt haben Sie benutzerdefinierte Beitragstypen in Ihre WordPress-Suchergebnisse aufgenommen!
Ich hoffe, der Beitrag hat Ihnen gefallen, und vergessen Sie nicht, ihn zu abonnieren, um Zugang zu weiteren großartigen WordPress-Inhalten zu erhalten!
Hallo, dieser Code funktioniert super, danke!
Ich war neugierig, wenn ich den Code verwende, sehe ich alle benutzerdefinierten Beitragstypen, die ich erstellt habe, außer einem. Es ist die einzige, die einen Bindestrich in es zB (Fallstudie) hat, könnte mit dem Bindestrich sein, warum dies ist der einzige Post-Typ nicht in meiner Suche erscheinen?
Vielen Dank im Voraus!
Hey Patrick - es könnte eine Reihe von Dingen sein, aber ich würde zuerst prüfen, ob die
exclude_from_search
auf den Parametertrue
. Wenn dies der Fall ist, erscheint er nicht in den Suchergebnissen und Sie müssen ihn ändern infalse
damit Beiträge in diesem benutzerdefinierten Beitragstyp erscheinen.Das ist sicher nicht der richtige Rahmen für diesen Beitrag, aber ich dachte, es kann nicht schaden, zu fragen.
Gibt es eine Möglichkeit, mit der pre_get_posts-Aktion Tags in die Suchergebnisse aufzunehmen? Mit anderen Worten, wenn die Suchanfrage/Schlüsselwörter mit dem Tag-Namen eines bestimmten Beitrags übereinstimmen, sollte dieser Beitrag auch unter den Ergebnissen angezeigt werden.
Ich weiß die Rücksichtnahme trotzdem sehr zu schätzen, Thomas. Danke!
Hallo Jared,
Gute Frage! Leider können Sie aufgrund der Funktionsweise des Hauptabfrageobjekts nicht einfach Beiträge anhängen, die mit dem Suchergebnis getaggt sind. Es würde eine
UNION
Abfrage, um die Ergebnisse zu verbinden, und das erfordert, dass Sie in einer völlig neuen Abfrage filtern. Vielleicht sollten Sie sich die SearchWP mit der Sie Ihre Suchergebnisse ziemlich genau filtern können.Hallo Thomas, das ist super, vielen Dank! Ich wusste nicht, dass es so einfach sein kann 🙂 .
Ich glaube, es sucht nur in den Titeln meiner benutzerdefinierten Beiträge, nicht in den anderen Feldern. Wissen Sie, ob es eine Möglichkeit gibt, alle Felder zu durchsuchen oder zusätzliche Felder anzugeben?
Herzlichen Dank!
Hallo Miranda,
Vielen Dank für die freundlichen Worte - und schön, dass Ihnen die Aufnahme benutzerdefinierter Beitragstypen in Ihre WordPress-Suchergebnisse leicht gefallen ist!
Zur zweiten Frage: WordPress macht das standardmäßig nicht. Ich empfehle hierfür das SearchWP-Plugin, da es das beste WordPress-Such-Plugin ist und es Ihnen ermöglicht, benutzerdefinierte Suchmaschinen zu erstellen, die Ihre zusätzlichen benutzerdefinierten Post-Type-Inhalte durchsuchen und in den Ergebnissen anzeigen können.
Danke, dass Sie diesen Code zur Verfügung stellen! Er hat mir geholfen, die Ereignisse des Veranstaltungskalenders in die Suche aufzunehmen. Einfach "Event" und es hat funktioniert.
Schön zu hören, Tom! Schön, dass es Ihnen geholfen hat, Ihren benutzerdefinierten Event-Post-Typ zu Ihren WordPress-Suchergebnissen hinzuzufügen!
Hallo Thomas,
Haben Sie versucht, diese mit Woocommerce-Produkte, wie ich kann nicht scheinen, um es zu arbeiten?
Vielen Dank!
Jordanien
Es sollte auch mit WooCommerce gut funktionieren. Sie würden hinzufügen
product
zum Array der Post Type Slugs hinzufügen. Alternativ könnten Sie ein Plugin wie SearchWP um die vollständige Kontrolle über die Anpassung der Suchergebnisse zu haben - und es wird auch nach Dingen wie Produkt-Metadaten gesucht!Hallo und danke für den Artikel.
Leider, wobei ein Noob mit WP, ich bin nicht in der Lage, es funktioniert.
Ich habe Ihre Funktion in die Datei functions.php eingefügt und darin einen Beitragstyp "Exkursion" eingefügt.
Dann habe ich versucht, mit dieser Abfrage alle Arten von Exkursionsbeiträgen anzuzeigen:
[website url]/?post_type=digression
Aber es werden alle Artikel angezeigt. Irgendeine Idee warum?
Danke.
Mit "Abschweifung" meinte ich "Nebenbei" 🙂 .
Hmmm... Vielleicht habe ich verstanden, was Ihre Funktion macht: Sie durchsucht nur die Beitragstypen, die Sie angegeben haben (richtig?).
Was ich brauche, ist eine Möglichkeit, nur einen bestimmten Beitragstyp mit einem bestimmten Parameter anzuzeigen (ich möchte alle Nebenartikel mit einem Link auflisten). Die Suche sollte trotzdem überall suchen 🙂 .
Für diese Anfrage wird dieses Tutorial nicht funktionieren. Ich denke, Sie brauchen etwas benutzerdefinierte für diese. Sie könnten immer SearchWP verwenden und eine der Maschinen konfigurieren, um diese Art der Abfrageparameter-Suche für Sie zu tun. Das ist der Weg, den ich empfehlen würde.
Hier ist ein Beispiel dafür, wie Sie in diese Richtung gehen könnten: https://searchwp.com/v3/docs/kb/how-to-change-your-search-query-parameter-from-s-to-something-else/