Benutzerdefinierte Felder zur Suche hinzufügen

Ich versuche, meiner Suche benutzerdefinierte Felder hinzuzufügen, damit sie durch Metawerte verfeinert werden können. Zurzeit habe ich einige Auswahllisten zu meiner normalen Suche hinzugefügt:

<form role="search" action="" method="get" id="searchform">    Nothing 500.00 100.00 50.00   Nothing 2011 2007 1991    

und ganz oben in meiner search.php ich diese Bedingung:

 $q = get_search_query(); if($q = 'carcpt'){ $price = $_GET['price']; $year = $_GET['year']; $search = new WP_Query( array( 'post_type' => 'carcpt', 'meta_query' => array( array( 'key' => '_price', 'value' => $price ), array( 'key' => '_year', 'value' => $year ) ) ) ); } 

Das ist das Szenario – ich habe 2 Fragen:

1) Dies scheint eine sehr “hacky” Möglichkeit zu sein, meine Suchergebnisse nach benutzerdefinierten Feldern zu ergänzen und zu verfeinern – gibt es einen besseren / allgemein akzeptierten Weg dies zu tun?

2) Das Problem mit der obigen Abfrage ist, dass, wenn der Benutzer keinen Preis oder ein Jahr eingibt – er die Abfrage ausführt und nur einen Posten mit leerem Preis / Jahr-Meta zurückgibt. In meiner Abfrage gibt es eine Möglichkeit zu bestimmen, ob ein Meta leer ist und meine Abfrage entsprechend zu ändern – ohne einen Schalter?

Solutions Collecting From Web of "Benutzerdefinierte Felder zur Suche hinzufügen"

1) Ich denke, dass Ihre Lösung in Bezug auf den “richtigen Weg” vollkommen akzeptabel ist – Post-Meta ist für die Suche bestimmt. Scheint mir nicht hacky.

2) Was Sie tun sollten, ist die Meta-Abfrage separat zu erstellen:

 $meta_query = array(); if( !empty( $_GET['price'] ) ) { $meta_query[] = array( 'key' => '_price', 'value' => $_GET['price'] ); } if( !empty( $_GET['year'] ) ) { $meta_query[] = array( 'key' => '_year', 'value' => $_GET['year'] ); } $search = new WP_Query( array( 'post_type' => 'carcpt', 'meta_query' => $meta_query ) ); 

Auf diese Weise werden nur Metaschlüssel abgefragt, die einen angegebenen, nicht leeren Wert haben.

Ich möchte darauf hinweisen, dass die Änderung von pre_get_posts besser in der Aktion pre_get_posts , da sonst zwei Abfragen ausgeführt werden: eine für die Suche nach ‘carcpt’ und dann die zweite Abfrage für die ‘carcpt’ Post-Typ und Meta-Abfrage.