非数字字符排在最后的升序数字排序

时间:2020-01-28 作者:gubu

我想根据数字“开始日期”值(例如1970年、1971年等)按升序返回搜索结果。但是,某些结果没有此字段的值,而是有“-”;目前,这些结果首先出现。有没有办法让具有“-”值的结果显示在搜索结果的末尾?我的当前代码如下:

$选项[\'ind\\u start\']=数组(\'label\'=>\'开始日期(最早)\',\'query\\u args\'=>数组(\'orderby\'=>\'meta\\u value\\u num\',\'meta\\u key\'=>\'开始日期\',\'order\'=>\'ASC\',),);

提前感谢!

1 个回复
SO网友:Djanym

尝试将查询参数修改为:

    $options[\'ind_start\'] = array(
        \'label\' => \'Start Date (Earliest)\',
        \'query_args\' => array(
            \'meta_query\' => array(
                \'start_date_query\' => array(
                    \'key\' => \'start_date\',
                    \'compare\' => \'EXISTS\', // Optional
                ),
            )
        )
    );
meta_query - 将只包括带有start_date 价值

然后添加WP查询顺序过滤器:

function my_order_filter($orderby, $obj){
    global $wpdb;

    // Put here some conditional logic if you want to apply this only for a specific query.

    $new_order_query_part = "{$wpdb->postmeta}.meta_value = \'-\' ASC, {$wpdb->postmeta}.meta_value ASC ";
    if( trim($orderby) ){
        $orderby = $new_order_query_part . \', \' . $orderby;
    } else {
        $orderby = $new_order_query_part;
    }

    return $orderby;
}
add_filter( \'posts_orderby_request\', \'my_order_filter\', 10, 2 );
此筛选器将应用于所有查询。如果只需要将订单功能添加到特定查询,那么在将新订单应用于请求之前,请使用一些条件筛选。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post