Benutzerdefinierte Suche nach benutzerdefinierten Beitragstypen, benutzerdefinierten Meta- und Suchfeldern
-
-
[Haben Sie diese Antwortgesehen] (http://wordpress.stackexchange.com/questions/66815/extending-search-query-with-additional-sentence-value/66904#66904)?[Have you seen this answer](http://wordpress.stackexchange.com/questions/66815/extending-search-query-with-additional-sentence-value/66904#66904)?
- 0
- 2013-07-08
- kaiser
-
Ich würdenicht,aberes scheintmassiv komplexfür das,wasich versuche zutun?I'd not but it seems massively complex for what I'm trying to do?
- 0
- 2013-07-08
- James J
-
"massiv komplex"bedeutet,dass Sienicht so viel Text lesenmöchten,oder?: P Bitte lesen Siees.Es wird Sie auf halbem Weg zum Minimumbringen."massively complex" means you don't want read that much text, right? :P Please read it. It will bring you down half the way minimum.
- 1
- 2013-07-08
- kaiser
-
Irgendwelche Fortschrittein dieser Frage?Any progress on that question?
- 0
- 2013-08-01
- kaiser
-
2 Antworten
- Stimmen
-
- 2013-07-08
Wenn Sie Ihre Abfrageerweiternmöchten,sollten Sie sie über den Filter
pre_get_posts
erweitern. Führen Sie danneinfacheine "Benutzerdefiniertes Feld" oder Metaabfrage aus.add_action( 'pre_get_posts', 'wpse105969_extended_search' ); function wpse105969_extended_search( $query ) { // Make sure we got a search query // and we're only modifying the main query. if ( ! $query->is_main_query() AND '' === $query->get( 's' ) AND 'your_custom_post_type' === $query->get( 'post_type' ) ) return $query; // Alter whatever you need: Make, Model, etc. $query->set( 'meta_query', array( 'relation' => 'OR', array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ), array( 'key' => 'price', 'value' => array( 20, 100 ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); return $query; }
If you want to extend your query, you should extend it through the
pre_get_posts
-filter. Then just do a "Custom Field" or meta query.add_action( 'pre_get_posts', 'wpse105969_extended_search' ); function wpse105969_extended_search( $query ) { // Make sure we got a search query // and we're only modifying the main query. if ( ! $query->is_main_query() AND '' === $query->get( 's' ) AND 'your_custom_post_type' === $query->get( 'post_type' ) ) return $query; // Alter whatever you need: Make, Model, etc. $query->set( 'meta_query', array( 'relation' => 'OR', array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ), array( 'key' => 'price', 'value' => array( 20, 100 ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); return $query; }
-
Hallo,dankefür die Antwort. Ich verwendenicht das Feld 's',dasfürnormale WordPress-Suchenerforderlichist (ich suchenurnach den Metadetails derbenutzerdefinierten Beitragstypen).Gibtes sowieso keine Möglichkeit,das Feld 's'im Suchformular zu verwenden,um Informationen zu diesem Thema zufinden?Dankenocheinmal.Hi thanks for the answer - I dont actually use the 's' field that normal wordpress searches require (im only search for the custom post types meta details). Is there anyway to NOT use the 's' field in the search form, struggling to find info on this. Thanks again.
- 0
- 2013-07-08
- James J
-
Außerdem habeich Ihren Code zumeinerfunctions.php hinzugefügt undin meine Feldereingefügt,aber wennichihn speichere,bricht WordPress (keine Fehler).Nichts von WordPressfunktioniert (Navi,Beiträge usw.).Also, I've added your code to my functions.php and added in my fields but when i save it breaks wordpress (no errors). Nothing from wordpress works (nav, posts etc).
- 0
- 2013-07-08
- James J
-
@JamesJ Bitteposteein Updatemit deinem Code.Hinweis: Haben Sie den Namen desbenutzerdefinierten Beitragstypsgeändert und "WP_DEBUG" auf "true"gesetzt?@JamesJ Please post an update with _your_ code. Hint: Did you change the custom post type name and did you set `WP_DEBUG` to `true`?
- 0
- 2013-07-09
- kaiser
-
- 2018-08-07
Hierist der Code. Sie können
$post_type
und$custom_fields
entsprechend Ihren Anforderungen ändern.function extend_admin_search( $query ) { // Extend search for document post type $post_type = 'document'; // Custom fields to search for $custom_fields = array( "_file_name", ); if( ! is_admin() ) return; if ( $query->query['post_type'] != $post_type ) return; $search_term = $query->query_vars['s']; // Set to empty, otherwise it won't find anything $query->query_vars['s'] = ''; if ( $search_term != '' ) { $meta_query = array( 'relation' => 'OR' ); foreach( $custom_fields as $custom_field ) { array_push( $meta_query, array( 'key' => $custom_field, 'value' => $search_term, 'compare' => 'LIKE' )); } $query->set( 'meta_query', $meta_query ); }; } add_action( 'pre_get_posts', 'extend_admin_search' );
Here’s the code. You can change
$post_type
and$custom_fields
according to your needs.function extend_admin_search( $query ) { // Extend search for document post type $post_type = 'document'; // Custom fields to search for $custom_fields = array( "_file_name", ); if( ! is_admin() ) return; if ( $query->query['post_type'] != $post_type ) return; $search_term = $query->query_vars['s']; // Set to empty, otherwise it won't find anything $query->query_vars['s'] = ''; if ( $search_term != '' ) { $meta_query = array( 'relation' => 'OR' ); foreach( $custom_fields as $custom_field ) { array_push( $meta_query, array( 'key' => $custom_field, 'value' => $search_term, 'compare' => 'LIKE' )); } $query->set( 'meta_query', $meta_query ); }; } add_action( 'pre_get_posts', 'extend_admin_search' );
Ichmöchteein Suchformularfüreinen bestimmtenbenutzerdefinierten Beitragstyp (Fahrzeug)erstellen und Filterfür diebenutzerdefinierten Metafelder (Preis,Alter) undbenutzerdefinierten Taxonomien (Marke) diesesbenutzerdefinierten Beitragstyps verwenden. Dies wird die Suchenach Websites vollständigersetzen undist dieeinzige verfügbare Suche,sodassich search.phpin meinerbenutzerdefinierten Vorlage verwenden wollte.
Ichmöchte,dass die Suche ungefähr so aussieht:
Durchsuchen Sie unsere Fahrzeuge
Make (Auswahlfeldmit allenbenutzerdefinierten Taxonomien - Audi,BMW usw.).
Modell (normales Eingabefeld,in das Personeneingeben können).
Preise über (Auswahlfeldmit Preisen ab 1000)
Alter (Auswahlfeldmit Optionen wie unter 1 Jahr,unter 3 Jahren,unter 5 Jahren,unter 10 Jahren).
Ichbin neuin benutzerdefinierten Feldern und weißnicht wirklich,woich anfangen soll (ich habeeinige Beispielebei Googlegefunden,aber keinestutgenau das,wasich anstrebe). Ich wollte auch kein Plugin verwenden. Ich vermutein search.php,dassich die aus dem Formular übergebenen Datengreife und damit $ args aufbaue,um sie an WP_Query zu übergeben?
Könntemichbitte jemandin die richtige Richtung weisen? Vielen Dankim Voraus