Ich habe ein Thema für ein Autohaus erstellt. Jedes Auto ist ein benutzerdefinierter Pfostentyp ("Fahrzeug") und verfügt über ca. 12 benutzerdefinierte Felder mit Angaben zu Marke, Modell, Kilometerstand, Kraftstofftyp usw. usw.
Grundsätzlich möchte ich auf der Homepage ein Suchformular, das Dropdown-Listen für Make & Model enthält und alle verfügbaren Marken oder Modelle enthält.
Ich möchte auch, dass es zwei Optionen für das Jahr gibt, sodass der Endbenutzer "2006" und "2012" auswählen kann und die Suchergebnisse alle Fahrzeuge mit dem Jahr zwischen diesen beiden Zahlen enthalten.
Gibt es da draußen ein Plugin, das das kann?
Vielen Dank für jede Hilfe .. das hat mich stundenlang verrückt gemacht !!!!
custom-post-types
search
absdigital
quelle
quelle
Antworten:
Schritt 1
Erstellen Sie zunächst ein Formular für die erweiterte Suche, mit dem Ihr Benutzer mit der Website interagieren soll, und speichern Sie es unter einem Namen (dh ich habe es als gespeichert
advanced-searchform.php
- aber speichern Siesearchform.php
es nicht mit, da es das Standardsuchformular von WordPress ersetzt ):Rufen Sie dann das Formular wie folgt in Ihre Vorlage auf:
Jetzt ist Ihr Suchformular fertig und Sie können das Suchformular verwenden und Benutzereingaben in die URL übernehmen.
Schritt 2
Sie benötigen lediglich Folgendes: Fragen Sie die Datenbank ab und fragen Sie den Beitragstyp und seine benutzerdefinierten Felder gemäß der Suchabfrage ab . Denken Sie daran, dass Ihre Suchanfrage jetzt die URL ist, die Sie nach dem Absenden des Formulars erhalten haben. Bitten Sie nun WordPress, Ihre benutzerdefinierte Suchergebnisseite zu laden, wenn das Formular gesendet wird. Fügen Sie die folgende Funktion in Ihre ein
functions.php
, damit Ihre benutzerdefinierte Suchvorlage anstelle der Standardfunktion aktiviert wirdsearch.php
:Ich habe den Code irgendwo von WPSE mitgebracht (ich habe die Wurzel vergessen), aber es gibt Kontroversen bei der Verwendung des obigen Codes. Aber es funktioniert tatsächlich ( lahme Entschuldigung natürlich ).
Überprüfen Sie einen anderen Weg, den @GM vorgeschlagen hat.
Schritt 3
Erstellen Sie eine neue Datei und speichern Sie sie mit
advanced-search-result.php
(weil wir diesen Namen verwendet habenfunctions.php
), und jetzt sind Sie frei - offensichtlich. Konzept ist:WP_Query()
(wenn Ihre Abfrage komplex ist, verwenden Sie die$wpdb
Abfrage),Ein Beispiel kann sein:
Also, hier ist deine letzte Sache. Trotzdem gibt es viele Herausforderungen:
$wpdb
benutzerdefinierte SQL-Abfrage für komplexe Suchergebnisse verwenden, und das ist reines MySQL - WordPress hat dort nichts.page.php
(odersearch.php
) Vorlage auswählen und diese Seite auf dieser Grundlage erstellen.Sie haben die Idee, jetzt sind Sie an der Reihe, den Weg zu erkunden und zu entdecken . Denken Sie daran, jeder Weg ist anders. Mach deins, damit ich dir folgen kann. :) :)
quelle
WP_Query()
benutzerdefiniertes Feld und verwenden Sie eine Schleife, um das Ergebnis<option>
anzuzeigen.pre_get_posts
Hook und nicht mit einer sekundären Schleife durchgeführt wird.Obwohl die Antwort von @ MayeenulIslam funktionieren könnte, denke ich, dass der richtige Weg, eine erweiterte Suche durchzuführen, die Verwendung des
pre_get_posts
Aktions-Hooks ist.Schritt 1: Suchformular
Dieser Schritt entspricht Schritt 1 in der anderen Antwort. Er hat nur
id
dasname
Feld geändert (<input type="text" ...>
für die Suche in "s" verwendet , sodass es direkt als Suchfeld verwendet wird. Speichern Sie diesen Code inadvanced-searchform.php
Ihrem Themenordner. Verwenden Sie dannget_template_part( 'advanced', 'searchform' );
bis Laden Sie es dort, wo es in Ihrem Thema erscheinen soll:Schritt 2: Fügen Sie der Suchabfrage Filter hinzu
Schritt 3: Vorlagen (optional)
Bei dieser Methode wird die Standardsuchvorlage von WordPress verwendet, um die Ergebnisse zu filtern, ohne dass eine sekundäre Abfrage erforderlich ist. Wenn Sie eine andere Vorlage für die erweiterte Suche verwenden möchten, können Sie den
template_include
Filter verwenden. Wenn Sie beispielsweise eineadvanced-search-template.php
Datei als Vorlage für Ergebnisse aus dem erweiterten Suchformular verwenden möchten :quelle