我有一个带有以下查询的自定义类别页面:
$args = array(
\'cat\' => $portfolioCategories,
\'posts_per_page\' => $itemsPerPage,
\'orderby\' => \'menu_order date\',
\'order\' => \'DESC\',
\'paged\' => $paged
);
query_posts( $args );
所以
\'orderby\' => \'menu_order\'
很好用。
\'orderby\' => \'date\'
很好用。
但是\'orderby\' => \'menu_order date\'
不起作用-我得到一些奇怪的完全随机的顺序。
我做错了什么?
PS:是的,我已经为我的函数文件中的帖子启用了页面属性(即菜单顺序)
PPS:无论我是否使用query_posts($args)
或new WP_Query($args)
编辑:生成的SQL如下所示:
SELECT SQL_CALC_FOUND_ROWS wp_rk2ukj_posts.ID
FROM wp_rk2ukj_posts
INNER JOIN wp_rk2ukj_term_relationships ON (wp_rk2ukj_posts.ID = wp_rk2ukj_term_relationships.object_id)
WHERE 1=1
AND ( wp_rk2ukj_term_relationships.term_taxonomy_id IN (89,93,94,95,96,106) )
AND wp_rk2ukj_posts.post_type = \'post\'
AND (wp_rk2ukj_posts.post_status = \'publish\' OR wp_rk2ukj_posts.post_status = \'private\')
GROUP BY wp_rk2ukj_posts.ID
ORDER BY wp_rk2ukj_posts.menu_order,wp_rk2ukj_posts.post_date DESC
LIMIT 0, 9
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
这将有助于:
可以在中使用多个字段orderby
论点法典shows you 如何做到这一点(并且你做得正确):
$query = new WP_Query( array( \'post_type\' => \'page\', \'orderby\' => \'menu_order date\', \'order\' => \'ASC\' ) );
它应该能解决你的问题。(应该这样做,但如果您想对DESC进行排序,可能不会,因为WordPress存在以下错误:
http://core.trac.wordpress.org/ticket/17065)
当然你总是可以使用posts_orderby
筛选以创建自己的ORDER BY
查询的一部分。
function my_posts_orderby($orderby_statement) {
$orderby_statement = "YOUR ORDER BY STATEMENT";
return $orderby_statement;
}
add_filter(\'posts_orderby\', \'my_posts_orderby\');
只需在调用查询之前添加此筛选器,然后将其删除即可。
SO网友:Stanislav Potapenko
根据Krzysiek Dródż的上述评论,我在代码中使用:
add_filter(\'posts_orderby\', \'my_product_order_by_sort\');
$args = array( \'post_type\' => \'product\', \'product_cat\' => $category->slug);
$loop = new WP_Query( $args );
.....
remove_filter(\'posts_orderby\', \'my_product_order_by_sort\');
所以我添加了多阶函数:
function my_product_order_by_sort($orderby_statement) {
$orderby_statement = "wp_posts.menu_order ASC, wp_posts.id ASC";
return $orderby_statement;
}