wake-up-neo.com

Frage Beiträge von benutzerdefinierten Feld "Preis"

Ich möchte alle Beiträge innerhalb einer bestimmten Preisspanne anzeigen. Beispiel: Wenn ein Benutzer 100 und 1000 eingibt (in zwei separaten Formularfeldern), werden auf meiner Website alle Posts angezeigt, die ein benutzerdefiniertes Feld mit dem Namen "Preis" mit einem numerischen Wert zwischen 100 und 1000 aufweisen.

Dies wurde in der Dokumentation zu WP Query gefunden. Ich bin mir jedoch nicht sicher, wie ich eine Abfrage basierend auf der Eingabe eines Formulars auf meiner WordPress-Site erstelle.

$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.

6
Andrew Hendrie

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

Angenommen, Ihr Formular legt die Variablen price_low und price_high GET fest, sodass die URL wie folgt aussieht:

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

Anschließend prüft Ihre Filterfunktion, ob diese Variablen vorhanden sind, und erstellt den meta_query. In diesem Beispiel wird überprüft, ob es sich um die Hauptabfrage auf der Homepage handelt. Auf der Seite Bedingte Tags wird erläutert, wie Sie überprüfen können, ob andere Arten von Abfragen ausgeführt werden, z. B. eine Kategorie oder ein Tag.

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 eines einfachen Formulars zur Übermittlung von Werten. Wenn Sie das Attribut action weglassen, wird das Formular an die aktuelle Seite gesendet.

<form method="GET">
    <input type="text" name="price_low">
    <input type="text" name="price_high">
    <input type="submit">
</form>
6
Milo

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

Ich bin nicht zu 100% sicher, dass es funktionieren wird, da es seit einem Jahr nicht mehr aktualisiert wurde, aber es ist möglicherweise einen Versuch wert.

0
annabwashere