我有一个搜索表单,其中包含多个分类标准选项。当我选择所有选项,或只选择一个,然后单击搜索时,它永远不会返回任何记录。我在理解关系以及如何正确设置数组方面存在问题。
$args = array('post_type' => array( 'property' ),
'order' => 'DESC',
'orderby' => 'post_date',
'meta_query' => array(
'relation' => 'AND',
array(
array(
'key' => 'property_address_postal_code',
'value' => $search,
'compare' => 'LIKE',
),
array(
'key' => 'property_address_state',
'value' => $search,
'compare' => 'LIKE',
),
array(
'key' => 'property_location',
'value' => $search,
'compare' => 'LIKE',
),
),
array(
'relation' => 'OR',
array(
'relation' => 'AND',
array(
'key' => 'property_price',
'value' => array($_GET['min-price'],$_GET['max-price']),
'type' => 'numeric',
'compare' => 'BETWEEN',
),
),
array(
'relation' => 'AND',
array(
'key' => 'property_price',
'value' => array($_GET['min-price'],$_GET['max-price']),
'type' => 'numeric',
'compare' => 'BETWEEN',
),
),
)
)
);
答案 0 :(得分:1)
首先,我不确定您是否完全理解关系属性在此函数中的应用方式。它将AND/OR
应用于同一级别的其他属性。因此,您的第一个relation => AND
确保您的$search
变量与您指定的某个属性匹配,并且property_price
介于最小值和最大值之间。
其次,对于后续的嵌套元查询,默认关系为AND
,因此当您尝试将$search
与不同的属性匹配时,您实际上是在尝试确保{{1}匹配您指定的所有属性。您可以尝试将$search
与一个属性或其他属性匹配来解决此问题。
第三,通过比较价格与最低和最高价格,元查询格式不正确,并且这两个元查询都是相同的。在这种情况下,您不需要关系,因为您只需要检查一个值。
您可以简化代码:
$search
现在,您正在制作一个查询,检查$args = array('post_type' => array( 'property' ),
'order' => 'DESC',
'orderby' => 'post_date',
'meta_query' => array(
'relation' => 'AND',
array(
'relation' => 'OR',
array(
'key' => 'property_address_postal_code',
'value' => $search,
'compare' => 'LIKE',
),
array(
'key' => 'property_address_state',
'value' => $search,
'compare' => 'LIKE',
),
array(
'key' => 'property_location',
'value' => $search,
'compare' => 'LIKE',
),
),
array(
'key' => 'property_price',
'value' => array($_GET['min-price'],$_GET['max-price']),
'type' => 'numeric',
'compare' => 'BETWEEN',
)
)
);
是$search
还是property_address_potal_code
或类似property_address_state
和property_location
介于最小值之间和最高价格。
根据代码中的其他逻辑,你可能仍然需要稍微改变它,但我认为这应该让你朝着正确的方向前进。