Abfragen von Posts nach benutzerdefiniertem Feld ‘Preis’

Ich möchte alle Beiträge innerhalb einer bestimmten Preisspanne anzeigen. Beispiel: Wenn ein Benutzer 100 und 1000 (in zwei separaten Formularfeldern) eingibt, werden auf meiner Site alle Posts mit einem benutzerdefinierten Feld namens “price” mit einem numerischen Wert zwischen 100 und 1000 angezeigt.

Gefunden unter der Dokumentation für WP-Abfrage; Ich bin mir jedoch nicht sicher, wie ich eine Abfrage basierend auf der Eingabe eines Formulars auf meiner WordPress-Website erstellen kann.

$args = array( 'post_type' => 'product', 'meta_query' => array( array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ), array( 'key' => 'price', 'value' => array( 20, 100 ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); $query = new WP_Query( $args ); 

Vielen Dank für Ihre Zeit.

Solutions Collecting From Web of "Abfragen von Posts nach benutzerdefiniertem Feld ‘Preis’"

Verwenden Sie die Aktion pre_get_posts , um einige Filtervariablen in der URL zu erkennen und die Abfrage entsprechend zu filtern.

price_low , Ihr Formular legt price_low und price_high GET vars fest, sodass die URL wie price_high aussieht:

 domain.com/?price_low=100&price_high=1000 

Dann überprüft Ihre Filterfunktion das Vorhandensein dieser Variablen und erstellt die meta_query . In diesem Beispiel wird überprüft, ob es sich um die Hauptabfrage auf der Startseite handelt. Auf der Seite Bedingte Tags erfahren Sie, wie Sie überprüfen können, ob andere Arten von Abfragen wie eine Kategorie oder ein Tag usw. auftreten.

 function wpa_filter_home_query( $query ){ if( $query->is_home() && $query->is_main_query() && isset( $_GET['price_low'] ) && isset( $_GET['price_high'] ) ) { $meta_query = array( array( 'key' => 'price', 'value' => array( $_GET['price_low'], $_GET['price_high'] ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ); $query->set( 'meta_query', $meta_query ); } } add_action( 'pre_get_posts', 'wpa_filter_home_query' ); 

EDIT – Beispiel für ein einfaches Formular zum Übergeben von Werten. Durch das Weglassen des action wird das Formular an die aktuelle Seite gesendet.

 

Ich hatte Glück mit dem Custom Query Fields Plugin für genau dieses Problem vorher.

Ich bin nicht 100% sicher, dass es funktionieren wird, da es seit einem Jahr nicht mehr aktualisiert wurde, aber es könnte einen Versuch wert sein.

Vielen Dank Milo etwas in deinem Code bearbeiten

 function wpa_filter_home_query( $query ){ if( $query->is_home() && $query->is_main_query() && isset( $_GET['price_low'] ) && isset( $_GET['price_high'] ) ) { $meta_query = array( array( 'key' => 'price', 'value' => $_GET['price_low'], 'type' => 'numeric', 'compare' => '>=' ) ); $query->set( 'meta_query', $meta_query ); $meta_query = array( array( 'key' => 'price', 'value' => $_GET['price_high'], 'type' => 'numeric', 'compare' => '< =' ) ); $query->set( 'meta_query', $meta_query ); } } add_action( 'pre_get_posts', 'wpa_filter_home_query' );