自定义WP_QUERY中按DESC、ASC排序

时间:2013-08-13 作者:ian

我需要在查询中进行多级排序。问题是如何像在SQL中那样对一个值DESC和另一个值ASC进行排序。当我在终端中运行时,以下SQL似乎为我提供了所需的内容:

SELECT DISTINCT * FROM wp_posts 
INNER JOIN wp_postmeta 
ON wp_posts.ID = wp_postmeta.post_id 
WHERE wp_posts.post_type = \'post\' 
AND wp_postmeta.meta_key = \'pb_issue_featured\'
AND wp_posts.post_status = \'publish\' 
ORDER BY wp_postmeta.meta_value DESC, wp_posts.menu_order ASC;
Thepb_issue_featured 是布尔值。我需要的最终结果是查询显示顶部此字段的meta值为1的帖子,然后在下面显示所有其他帖子。然后,第二层订购是指定的menu_order (我正在使用post-types-order插件)。

问题是我的布尔值需要从高到低(1到0)排序,但menu\\u的顺序正好相反。插件首先排序的菜单顺序为1。因此,在WP\\u查询中使用内置的“orderby”不起作用。有人有什么建议吗?我查看了“posts\\u orderby”过滤器,但无法获取它。我真的不知道应该在哪里应用它,也不知道如何解决它。它只是没有按照我的方式重新排序。

谢谢你的帮助!如果相关的话,我会发布实际的WP\\u查询,但我希望尽量简短。

查询参数:

$args = array(
        \'post_type\' => \'post\',
        \'meta_key\' => \'pb_issue_featured\',
        \'orderby\'   => \'meta_value\',
        \'order\' => \'DESC\',
        \'post_status\' => \'publish\',
        \'posts_per_page\' => $posts,
        \'paged\' => $paged,
        \'meta_query\' => array(
            array(
                \'key\' => \'headline\',
                \'value\' => 1,
                \'compare\' => \'!=\' 
                )
            )
        );
$q = new WP_Query($args);

3 个回复
最合适的回答,由SO网友:Marin Bînzari 整理而成

Try this:

$args = array(
        \'post_type\' => \'post\',
        \'meta_key\' => \'pb_issue_featured\',
        \'orderby\'   => \'meta_value\',
        \'order\' => \'DESC\',
        \'posts_per_page\' => $posts,
        \'paged\' => $paged,
        \'paged\' => 1,
        \'meta_query\' => array(
            array(
                \'key\' => \'headline\',
                \'value\' => 1,
                \'compare\' => \'!=\' 
                )
            )
        );

add_filter( \'posts_orderby\', \'filter_query\' );
$q = new WP_Query($args);
remove_filter( \'posts_orderby\', \'filter_query\' );

function filter_query( $query ) {
    $query .= \', wp_posts.menu_order ASC\';
    return $query;
}
SO网友:Donn Frederick

按ID ASC排序

$args = array(
    \'order\' => \'ASC\',
    \'orderby\' => \'ID\',
);

按ID描述订购

$args = array(
    \'order\' => \'DESC\',
    \'orderby\' => \'ID\',
);

SO网友:Iman

当使用elementor插件之类的东西并有一个带有日期名称的自定义字段时,请将以下操作添加到elementor pro/elementor pro。插件编辑器中的php。

add_action( \'elementor/query/my_custom_filter\', function( $query ) {
 
    $query->set( \'meta_key\', \'date\' );
    $query->set( \'orderby\', \'meta_value\' );
    $query->set( \'order\', \'DESC\' );
    $query->set( \'posts_per_page\', 2 );     
    
} );

结束

相关推荐

order by meta_key

我有一个小问题:我不能按我的意愿安排活动。我想按升序排列即将到来的活动。。。我正在使用以下内容:new WP_Query( array( \'author\' => $current_user->ID, \'post_type\' =>\'tribe_events\', \'orderby\' => \'meta_value\', \'meta_key\' => \'_Ev