通过DESC,ASC在自定义WP_Query中排序


8

我需要在查询中进行多级排序。问题在于如何像在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;

pb_issue_featured是一个布尔值。我需要的最终结果是查询以在顶部显示该字段的值为1的帖子,然后显示所有其他字段。然后指定第二层订购menu_order(我正在使用帖子类型订购插件)。

问题是我的布尔值需要从高到低(从1到0)排序,但是menu_order相反。该插件首先订购的菜单的菜单顺序为1。因此,无法使用WP_Query中的内置“ orderby”。有人有建议吗?我调查了“ posts_orderby”过滤器,但无法理解。真的不确定应该在哪里应用它或如何解决它。只是没有按照我的方式重新排序。

谢谢您的帮助!如果相关,我将发布实际的WP_Query,但我想使其尽可能短。

查询参数:

$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);

好了,您应该发布WP_Query,以查看其格式是否正确。
马林·本萨里(MarinBînzari)2013年

这就是荣耀。我目前未按任何顺序排序,但布尔元值b / c是使该级别或排序正常工作的唯一方法。该网站还使用“标题”帖子,其优先于“精选”帖子。因此,我在此查询中将它们排除在外
IAN

Answers:


20

尝试这个:

$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;
}

就像老板斯巴达库斯(Spartakus)。感谢您简洁准确的答案。这就像魅力一样
-ian

1
您也可以在order by子句中使用数组(WP 4.0及更高版本)
Blueriver
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.