按自定义字段‘价格’查询帖子

时间:2013-03-18 作者:Andrew Hendrie

我想显示给定价格范围内的所有帖子。例如:当用户输入100和1000(在两个单独的表单字段中)时,“我的网站”将显示所有具有名为“价格”的自定义字段的帖子,该字段的数值介于100和1000之间。

在可湿性粉剂查询文档下发现此问题;然而,我不确定如何根据WordPress网站上表单的输入创建查询。

$args = array(
\'post_type\' => \'product\',
\'meta_query\' => array(
    array(
        \'key\' => \'color\',
        \'value\' => \'blue\',
        \'compare\' => \'NOT LIKE\'
    ),
    array(
        \'key\' => \'price\',
        \'value\' => array( 20, 100 ),
        \'type\' => \'numeric\',
        \'compare\' => \'BETWEEN\'
    )
)
);
$query = new WP_Query( $args );
感谢您抽出时间。

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

使用pre_get_posts 检测URL中的某些筛选器变量并相应地筛选查询的操作。

例如,假设您的表单集price_lowprice_high 获取vars,因此URL如下所示:

domain.com/?price_low=100&price_high=1000
然后,过滤器函数检查这些变量的存在,并创建meta_query. 本例检查它是否是主页上的主查询,请参阅Conditional Tags 页面介绍如何检查是否正在发生其他类型的查询,如类别或标记等。。

function wpa_filter_home_query( $query ){
    if( $query->is_home()
    && $query->is_main_query()
    && isset( $_GET[\'price_low\'] )
    && isset( $_GET[\'price_high\'] ) ) {
        $meta_query = array(
            array(
                \'key\' => \'price\',
                \'value\' => array( $_GET[\'price_low\'], $_GET[\'price_high\'] ),
                \'type\' => \'numeric\',
                \'compare\' => \'BETWEEN\'
            )
        );
        $query->set( \'meta_query\', $meta_query );
    }
}
add_action( \'pre_get_posts\', \'wpa_filter_home_query\' );
编辑-提交值的简单表单示例。省略action 属性将表单提交到当前页面。

<form method="GET">
    <input type="text" name="price_low">
    <input type="text" name="price_high">
    <input type="submit">
</form>

SO网友:annabwashere

我很幸运Custom Query Fields 此版本之前的插件。

我不是百分之百肯定它会工作,因为它已经一年没有更新了,但它可能值得一试。

SO网友:amir saad

感谢您在代码中编辑Milosome

function wpa_filter_home_query( $query ){
    if( $query->is_home()
    && $query->is_main_query()
    && isset( $_GET[\'price_low\'] )
    && isset( $_GET[\'price_high\'] ) ) {
        $meta_query = array(
            array(
                \'key\' => \'price\',
                \'value\' => $_GET[\'price_low\'],
                \'type\' => \'numeric\',
                \'compare\' => \'>=\'
            )
        );
        $query->set( \'meta_query\', $meta_query );
        $meta_query = array(
            array(
                \'key\' => \'price\',
                \'value\' => $_GET[\'price_high\'],
                \'type\' => \'numeric\',
                \'compare\' => \'<=\'
            )
        );
        $query->set( \'meta_query\', $meta_query );
    }
}
add_action( \'pre_get_posts\', \'wpa_filter_home_query\' );

结束

相关推荐

Per theme plugins?

我正在构建一个插件,它可以对博客页面的评论部分进行大量修改。它认为我不能用一种适用于所有主题的方式来实现这一点——根据使用的特定主题,必须调整一些CSS。我猜在将来,插件还会在数据库中存储一些数据。所以我想它应该是一个插件,而不是一个主题。(?)因此,这些问题:有没有可能以某种方式表明插件只能处理这个主题和那个主题?然后发布一些相当简单的插件版本,每个版本都针对一组特定的主题进行了调整?或者插件应该与。。。是否存在所有主题?除了按主题插件和/或分叉和修改现有主题之外,你能想出其他解决方案吗?也许是儿童主题