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