WP_QUERY按自定义元关键字“PRICE”排序

时间:2020-02-27 作者:KJRwebdev

我已经创建了一个自定义帖子字段,用于我的网站,它是待售房地产项目的价格(这是帖子的主题)。它应该按价格对帖子档案进行排序,但我无法将其从高到低排序;它的分类如下:
290万美元
2445万美元
190万美元
1300万美元

客户将添加帖子,以便他们能够轻松地以美元的形式输入值。

我尝试将输入转换为无符号和数字,并尝试了其他方法,如meta\\u key\\u num而不是meta\\u key。

这是我目前拥有的“几乎”有效的东西。

add_action( \'pre_get_posts\', \'kr_change_posts_order\' ); 
// start - from Toolset
function func_orderby_asking_price( $orderby ) {
    global $WP_Views;

     if($WP_Views) {
         $orderby = str_replace( \'wp_postmeta.meta_value\', "cast(replace(trim( leading \'$\'  from wp_postmeta.meta_value),\',\',\'\')  AS UNSIGNED)", $orderby ); // also tried NUMERIC
    }

    return $orderby;
}
add_filter(\'posts_orderby\', \'func_orderby_asking_price\' );
// end from Toolset

function kr_change_posts_order( $query ) {
    if ( $query->is_main_query() && !is_admin() ) {
        $orderby = genesis_get_custom_field( \'price\' );
        $query->set( \'cat\', ( array( 5, 6, 15 ) ) );
        $query->set( \'meta_key\', \'price\' );
        $query->set( \'orderby\', \'meta_value\' ); // also tried meta_value_num
        $query->set( \'order\', \'DESC\' );
    }
}
这实际上是我发现并修改的两段代码(函数)。我也尝试过将函数分开,而不是将一个函数放在另一个函数中,但到目前为止,还没有找到一种解决方案来让排序正常工作。

我已经在这个网站和其他地方寻找了几天的解决方案,但运气不好。

提前感谢您的帮助。

KJR公司

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

感谢wpsites的布拉德·道尔顿。net帮助我找到答案。

安装高级自定义字段插件。创建一个名为price的自定义字段,格式为数字。

使用以下代码(基于比尔·埃里克森的教程):

add_action( \'pre_get_posts\', \'kr_change_posts_order\' ); 
function kr_change_posts_order( $query ) {
    if ( $query->is_main_query() && !is_admin() && !is_page() ) {
        $orderby = genesis_get_custom_field( \'price\' );
        $query->set( \'cat\', ( array( 5, 6, 15 ) ) );
        $query->set( \'meta_key\', \'price\' );
        $query->set( \'orderby\', \'meta_value_num\' );
        $query->set( \'order\', \'DESC\' );
    }
}
对于ID为5、6和15的三个帖子类别,它按价格降序排序。

相关推荐

按元值日期(Desc或ASC)过滤Pre_Get_Posts中的帖子

我试图通过一个元值来排序帖子,但它并没有以正确的方式工作。我将日期存储在post meta值中,如下所示01 December 2019 10:00. 现在我想对帖子进行排序desc 或asc 就像date.我尝试了以下代码:$orderby = $query->get( \'orderby\' ); $sorting = $query->get( \'order\' ); if (\'month\' == $order