Php Wordpress元查询或/和关系不工作

Php Wordpress元查询或/和关系不工作,php,wordpress,Php,Wordpress,我有一个带有多个分类选项的搜索表单。当我选择所有选项,或仅选择一个选项,然后单击“搜索”时,它不会返回任何记录。我在理解关系和如何正确设置数组方面有问题 $args = array('post_type' => array( 'property' ), 'order' => 'DESC', 'orderby' => 'post_date', 'meta_query' => array(

我有一个带有多个分类选项的搜索表单。当我选择所有选项,或仅选择一个选项,然后单击“搜索”时,它不会返回任何记录。我在理解关系和如何正确设置数组方面有问题

$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',
                ),
            ),
        )
    )
);

首先,我不确定您是否完全理解relation属性在这个函数中的应用。它将
和/或
应用于同一级别的其他属性。因此,您的第一个
关系=>和
确保
$search
变量与您指定的属性之一匹配,并且
属性\u price
介于最小值和最大值之间

其次,对于后续的嵌套元查询,默认关系是
,因此当您尝试对不同的属性匹配
$search
时,实际上是在尝试确保
$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
是否类似于
属性地址\u potal\u code
或类似于
属性地址\u状态
或类似于
属性位置
属性价格
介于最低和最高价格之间


根据代码中的其他逻辑,您可能仍然需要对其进行一些修改,但我认为这会让您朝着正确的方向前进。

谢谢,您是我的明星。一切都和你说的一模一样,我理解SQL查询中的关系,但在Wordpress meta_查询中我不理解。再次感谢您提供的解决方案。我喜欢认为元查询函数类似于PHP
infrade()
,因为
关系将每个元查询粘合在一起,使用特定的关系作为分隔符。我希望这能帮助你更好地理解函数!