我制作了一个自定义的帖子类型(sidebar\\u元素),它显示在提要栏上。在每个侧边栏元素上,管理员可以选择该元素在侧边栏中的显示位置,即“top”、“middle”或“bottom”,并且该值保存在meta字段中。这些路线的Meta值为30、20和10。
现在,如果有多个具有相同对齐方式的侧栏元素,那么它们应该按照给定的menu\\u order值对齐。
这就是我在侧边栏中努力实现这一切的方式。php
$sidebarElems = new WP_Query( array (
\'post_type\' => \'sidebar_element\',
\'posts_per_page\' => -1,
\'meta_key\' => \'sidebar_element_meta_alignment\',
\'orderby\' => \'meta_value_num menu_order\',
\'order\' => \'DESC\' ) );
然而,这是行不通的。元素首先按排序
meta_value_num
ascending 然后,正确地说
menu_order
. 如果我删除
menu_order
从…起
orderby
,
meta_values
正确排序。
这件事快把我逼疯了!
请帮忙。谢谢
EDIT
以下是生成的SQL查询var_dump($sidebarElems)
SELECT XXX_posts.* FROM XXX_posts
INNER JOIN XXX_postmeta ON (XXX_posts.ID = XXX_postmeta.post_id)
WHERE 1=1 AND XXX_posts.post_type = \'sidebar_element\' AND (XXX_posts.post_status = \'publish\') AND (XXX_postmeta.meta_key = \'sidebar_element_meta_alignment\' )
GROUP BY XXX_posts.ID
ORDER BY XXX_postmeta.meta_value+0,XXX_posts.menu_order DESC
ANSWER找到答案,请检查以下内容
最合适的回答,由SO网友:micadelli 整理而成
找到了此问题的答案。
WordPress自己的orderby
尝试按多个值排序时功能不全。
我通过改变WP_Query
到SQL Query
, 包括第二个DESC
之后_postmeta.meta_value+0
SELECT XXX_posts.* FROM XXX_posts
INNER JOIN XXX_postmeta ON (XXX_posts.ID = XXX_postmeta.post_id)
WHERE 1=1 AND XXX_posts.post_type = \'sidebar_element\' AND (XXX_posts.post_status = \'publish\') AND (XXX_postmeta.meta_key = \'sidebar_element_meta_alignment\' )
GROUP BY XXX_posts.ID
ORDER BY XXX_postmeta.meta_value+0 DESC,XXX_posts.menu_order DESC