проблема с мета-запросом с несколькими числами


У меня проблема с формой поиска. У меня в основном есть 7 полей ввода, используемых для поиска различных свойств. Все они, кроме последних двух, работают, как только я ввожу последние два (минимальная цена и максимальная цена), форма не возвращает результатов, тогда как если я выну их из уравнения, форма будет работать нормально.

Запрос выглядит так -

<?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() ) :
    ?>

Для меня это новая территория, поэтому я немного растерян, я предполагаю, что это как-то связано с метой запрос, как я прошел и проверил все переменные и имена в форме.

Author: benjosity, 2015-11-03

1 answers

Очевидно, непроверенный и полу-псевдокод. Идея заключается в том, что мета-запрос уже представляет собой массив массивов, каждое поле в вашей форме является еще одним вложенным массивом. Если значение существует, мы помещаем его в массив.

<?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
Author: jdm2112, 2015-11-04 14:48:36