为什么我的多重排序不起作用?

时间:2013-08-07 作者:gillespieza

我有一个带有以下查询的自定义类别页面:

$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

2 个回复
最合适的回答,由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;
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post