проблема с мета-запросом с несколькими числами
У меня проблема с формой поиска. У меня в основном есть 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() ) :
?>
Для меня это новая территория, поэтому я немного растерян, я предполагаю, что это как-то связано с метой запрос, как я прошел и проверил все переменные и имена в форме.
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 );