按最小/最大值进行高级搜索

时间:2014-04-07 作者:CoreyRS

我正在构建一个高级搜索表单,它允许我通过不同的参数进行搜索。目前,按分类法进行搜索效果良好。我的问题是试图设置搜索依据的最低价格。这是我函数中的代码。php文件:

function advanced_search_query($query) {
    if ($query->is_search) {
        $query->set(\'post_type\', array( \'properties\' ));

        if (isset($_GET[\'propertyfor\'])) {
            $query->set(\'taxonomy\', \'propertyfor\');
            $query->set(\'terms\', $_GET[\'propertyfor\']);
        }

        if (isset($_GET[\'propertytype\'])) {
            $query->set(\'taxonomy\', \'propertytype\');
            $query->set(\'terms\', $_GET[\'propertytype\']);
        }

        if (isset($_GET[\'minPrice\'])) {
            $query->set(\'meta_query\', array(
                \'key\' => \'shru_price\',
                \'value\' => $_GET[\'minPrice\'],
                \'compare\' => \'>=\',
                \'type\' => \'NUMERIC\'
            ));
        }
    };
    return $query;
};
add_filter(\'pre_get_posts\', \'advanced_search_query\', 1000);
如您所见,我试图使用元查询来处理它,但什么都没有发生。显示结果时完全忽略最低价格。

有人知道怎么修理吗?

编辑:仅供参考,数值存储在数据库中,没有任何特殊字符。

更新:它适用于以下情况,其中我设置了最小值和最大值,并在两者之间使用:

    if (isset($_GET[\'minPrice\']) && isset($_GET[\'maxPrice\'])) {
        $query->set(\'meta_query\', array(
            array(
                \'key\' => \'shru_price\',
                \'value\' => array($_GET[\'minPrice\'], $_GET[\'maxPrice\']),
                \'compare\' => \'BETWEEN\',
                \'type\' => \'NUMERIC\'
            )
        ));
    }
但不是为了我最初发布的内容,那里只设置了一个>=<=. 我在两者之间使用了elseif语句,但仍然没有产生任何结果。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

A meta_query is an array of arrays. You only have an array.

    $query->set(\'meta_query\', array(
        \'key\' => \'shru_price\',
        \'value\' => $_GET[\'minPrice\'],
        \'compare\' => \'>=\',
        \'type\' => \'NUMERIC\'
    ));
它应该是:

$query->set(
  \'meta_query\', 
  array(
    array(
      \'key\' => \'shru_price\',
      \'value\' => $_GET[\'minPrice\'],
      \'compare\' => \'>=\',
      \'type\' => \'NUMERIC\'
    )
  )
);
请在使用之前验证/清理用户提供的数据!

结束

相关推荐

Several loop in search result

我想在搜索后的结果中使用两个循环。首先,如果有结果,我开始循环<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> 并在循环后显示属于某个类别的文章<?php $cats = get_categories(); foreach ($cats as $cat) { query_posts(\'cat=\'.$cat-&g