WP_QUERY ORDERBY不使用META_VALUE_NUM和MENU_ORDER

时间:2013-03-01 作者:micadelli

我制作了一个自定义的帖子类型(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
找到答案,请检查以下内容

1 个回复
最合适的回答,由SO网友:micadelli 整理而成

找到了此问题的答案。

WordPress自己的orderby 尝试按多个值排序时功能不全。

我通过改变WP_QuerySQL 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

结束

相关推荐

自定义POST类型支持GET_USERS(‘orderby=post_count’);

默认WordPress功能get_users(\'orderby=post_count\'); 仅向用户订购他们所发帖子的数量。你知道如何修改它以支持自定义帖子类型吗?UPDATE:我只想查询“公司项目”类型的帖子。目前,此代码段位于“我的函数”中。php: function user_query_count_post_type($args) { $args->query_from = str_replace(\"post_type = post AND\", \"post_type