it-swarm.com.de

Erweiterte Suche nach Minimal-/Maximalwerten

Ich erstelle ein erweitertes Suchformular, mit dem ich nach verschiedenen Parametern suchen kann. Derzeit funktioniert die Suche nach Taxonomien einwandfrei. Mein Problem tritt bei dem Versuch auf, einen Mindestpreis für die Suche festzulegen. Hier ist der Code in meiner functions.php-Datei:

function advanced_search_query($query) {
    if ($query->is_search) {
        $query->set('post_type', array( 'properties' ));

        if (isset($_GET['propertyfor'])) {
            $query->set('taxonomy', 'propertyfor');
            $query->set('terms', $_GET['propertyfor']);
        }

        if (isset($_GET['propertytype'])) {
            $query->set('taxonomy', 'propertytype');
            $query->set('terms', $_GET['propertytype']);
        }

        if (isset($_GET['minPrice'])) {
            $query->set('meta_query', array(
                'key' => 'shru_price',
                'value' => $_GET['minPrice'],
                'compare' => '>=',
                'type' => 'NUMERIC'
            ));
        }
    };
    return $query;
};
add_filter('pre_get_posts', 'advanced_search_query', 1000);

Wie Sie sehen, versuche ich, mit einer Meta-Abfrage umzugehen, aber es passiert nichts. Der Mindestpreis wird bei der Anzeige der Ergebnisse vollständig ignoriert.

Weiß jemand, wie man das behebt?

Edit: FYI, die numerischen Werte werden ohne Sonderzeichen in der Datenbank gespeichert.

UPDATE: Es funktioniert für Folgendes, wobei ich einen minimalen und einen maximalen Wert setze und ZWISCHEN verwende:

    if (isset($_GET['minPrice']) && isset($_GET['maxPrice'])) {
        $query->set('meta_query', array(
            array(
                'key' => 'shru_price',
                'value' => array($_GET['minPrice'], $_GET['maxPrice']),
                'compare' => 'BETWEEN',
                'type' => 'NUMERIC'
            )
        ));
    }

aber nicht für das, was ich ursprünglich gepostet habe, wo nur eines festgelegt ist und ich >= oder <= verwende. Ich habe elseif-Anweisungen verwendet, aber es wurden immer noch keine Ergebnisse erzielt.

1
CoreyRS

Ein meta_query ist ein Array von Arrays . Sie haben nur ein Array.

    $query->set('meta_query', array(
        'key' => 'shru_price',
        'value' => $_GET['minPrice'],
        'compare' => '>=',
        'type' => 'NUMERIC'
    ));

Es sollte sein:

$query->set(
  'meta_query', 
  array(
    array(
      'key' => 'shru_price',
      'value' => $_GET['minPrice'],
      'compare' => '>=',
      'type' => 'NUMERIC'
    )
  )
);

Und bitte validieren/bereinigen Sie die vom Benutzer angegebenen Daten, bevor Sie sie verwenden!

5
s_ha_dum