wake-up-neo.net

meta_query Problem mit mehreren Zahlen

Ich habe ein Problem mit einem Suchformular. Grundsätzlich habe ich 7 Eingabefelder, um verschiedene Eigenschaften zu suchen. Abgesehen von den letzten beiden, funktionieren sie alle. Sobald ich die letzten beiden einführe (Mindest- und Höchstpreis), gibt das Formular keine Ergebnisse zurück. Wenn ich sie aus der Gleichung herausnehme, funktioniert das Formular einwandfrei.

Die Abfrage sieht so aus -

<?php
    $_location = $_GET['location'] != '' ? $_GET['location'] : '';
    $_status = $_GET['status'] != '' ? $_GET['status'] : '';
    $_type = $_GET['type'] != '' ? $_GET['type'] : '';
    $_minbed = $_GET['minbed'] != '' ? $_GET['minbed'] : '';
    $_maxbed = $_GET['maxbed'] != '' ? $_GET['maxbed'] : '';
    $_minprice = $_GET['minpay'] != '' ? $_GET['minpay'] : '';
    $_maxprice = $_GET['maxprice'] != '' ? $_GET['maxprice'] : '';

    // Start the Query
    $property_args = array(
      'post_type'     =>  'property-spaces',
      'posts_per_page' => -1,
      'meta_query'    =>  array(
        array(
          'key'     => 'wpcf-location-area',
          'value'   => $_location,
          'compare' => 'LIKE',
          ),
        array(
          'key'     => 'wpcf-property-status',
          'value'   => $_status,
          'compare' => 'LIKE',
          ),
        array(
          'key'     => 'wpcf-property-type',
          'value'   => $_type,
          'compare' => 'LIKE',
          ),
        array(
          'key' => 'wpcf-total-rooms',
          'value' => $_minbed,
          'compare' => '>=',
          'type' => 'numeric',
          ),
        array(
          'key' => 'wpcf-total-rooms',
          'value' => $_maxbed,
          'compare' => '<=',
          'type' => 'numeric',
          ),
        array(
          'key' => 'wpcf-min-room-price',
          'value' => $_minprice,
          'compare' => '>=',
          'type' => 'numeric',
          ),
        array(
          'key' => 'wpcf-max-room-price',
          'value' => $_maxprice,
          'compare' => '<=',
          'type' => 'numeric',
          ),
      )
    );
    $propertySearchQuery = new WP_Query( $property_args );
    if( $propertySearchQuery->have_posts() ) :
    ?>

Das ist Neuland für mich, also bin ich ein bisschen verloren. Ich vermute, es hat etwas mit der Meta-Abfrage zu tun, als ich alle Variablen und Namen im Formular überprüft habe.

1
benjosity

Offensichtlich ungetesteter und semi-pseudo Code. Die Idee ist, dass eine Meta-Abfrage bereits ein Array von Arrays ist. Jedes Feld in Ihrem Formular ist ein anderes verschachteltes Array. Wenn ein Wert existiert, schieben wir ihn auf das Array.

<?php
$_location = $_GET['location'] != '' ? $_GET['location'] : '';
$_status = $_GET['status'] != '' ? $_GET['status'] : '';
// Etc for all form fields

$meta_query = array(); // Declare empty array


// Test each var for a value; if exists add to meta query array
if($_location) $meta_query[] = array( 'key' => 'wpcf-location-area', 'value' => $_location, 'compare' => 'LIKE' );
if($_status) $meta_query[] = array( 'key' => 'wpcf-property-status', 'value'   => $_status, 'compare' => 'LIKE' );

// Start the Query
$property_args = array(
  'post_type'     =>  'property-spaces',
  'posts_per_page' => -1,
  'meta_query'    =>  $meta_query
);

$propertySearchQuery = new WP_Query( $property_args );
0
jdm2112