______UPDATE_______
Obwohl ich immer mehr Stimmen bekomme und die Lösung funktioniert, ist die Antwort von Cybmeta tatsächlich die Antwort, die nett und WordPress- artig ist. Das solltest du unbedingt probieren.
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 Sie searchform.php
es nicht mit, da es das Standardsuchformular von WordPress ersetzt ):
<form method="get" id="advanced-searchform" role="search" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<h3><?php _e( 'Advanced Search', 'textdomain' ); ?></h3>
<!-- PASSING THIS TO TRIGGER THE ADVANCED SEARCH RESULT PAGE FROM functions.php -->
<input type="hidden" name="search" value="advanced">
<label for="name" class=""><?php _e( 'Name: ', 'textdomain' ); ?></label><br>
<input type="text" value="" placeholder="<?php _e( 'Type the Car Name', 'textdomain' ); ?>" name="name" id="name" />
<label for="model" class=""><?php _e( 'Select a Model: ', 'textdomain' ); ?></label><br>
<select name="model" id="model">
<option value=""><?php _e( 'Select one...', 'textdomain' ); ?></option>
<option value="model1"><?php _e( 'Model 1', 'textdomain' ); ?></option>
<option value="model2"><?php _e( 'Model 1', 'textdomain' ); ?></option>
</select>
<input type="submit" id="searchsubmit" value="Search" />
</form>
Rufen Sie dann das Formular wie folgt in Ihre Vorlage auf:
<?php get_template_part( 'advanced', 'searchform' ); ?>
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 wird search.php
:
<?php
function wpse_load_custom_search_template(){
if( isset($_REQUEST['search']) == 'advanced' ) {
require('advanced-search-result.php');
die();
}
}
add_action('init','wpse_load_custom_search_template');
?>
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 haben functions.php
), und jetzt sind Sie frei - offensichtlich. Konzept ist:
- Holen Sie sich die Daten von der URL,
- Verwenden Sie eine einfache
WP_Query()
(wenn Ihre Abfrage komplex ist, verwenden Sie die $wpdb
Abfrage),
- Übergeben Sie die Befehle innerhalb der Abfrage, rufen Sie Daten aus der Datenbank ab und
- Ergebnis anzeigen [s]
Ein Beispiel kann sein:
<?php
// Get data from URL into variables
$_name = $_GET['name'] != '' ? $_GET['name'] : '';
$_model = $_GET['model'] != '' ? $_GET['model'] : '';
// Start the Query
$v_args = array(
'post_type' => 'vehicle', // your CPT
's' => $_name, // looks into everything with the keyword from your 'name field'
'meta_query' => array(
array(
'key' => 'car_model', // assumed your meta_key is 'car_model'
'value' => $_model,
'compare' => 'LIKE', // finds models that matches 'model' from the select field
),
)
);
$vehicleSearchQuery = new WP_Query( $v_args );
// Open this line to Debug what's query WP has just run
// var_dump($vehicleSearchQuery->request);
// Show the results
if( $vehicleSearchQuery->have_posts() ) :
while( $vehicleSearchQuery->have_posts() ) : $vehicleSearchQuery->the_post();
the_title(); // Assumed your cars' names are stored as a CPT post title
endwhile;
else :
_e( 'Sorry, nothing matched your search criteria', 'textdomain' );
endif;
wp_reset_postdata();
?>
Also, hier ist deine letzte Sache. Trotzdem gibt es viele Herausforderungen:
- Alternative Werte - Eine erweiterte Suche kann mit ALLEN Feldern oder JEDEM Feld durchgeführt werden. Sie müssen also sicherstellen, dass die Abfrage alle Ergebnisse gemäß Suche und Daten erfasst. Sie können eine
$wpdb
benutzerdefinierte SQL-Abfrage für komplexe Suchergebnisse verwenden, und das ist reines MySQL - WordPress hat dort nichts.
- Desinfektion und Validierung - Das Textfeld und der Textbereich sind so anfällig, dass es zu Fehlpraktiken auf Ihrer Website kommen kann. Die Übergabe von Rohdaten wäre daher unsicher. Sie müssen sie bereinigen und validieren, bevor Sie sie an die Datenbankabfrage übergeben. ( Datenbereinigung und -validierung mit WordPress - TutsPlus )
- Entwerfen - Sie können die
page.php
(oder search.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. :) :)