Orderby = none not working

时间:2012-08-21 作者:Eduardo Leal

我正在尝试将“orderby=none”设置为我的循环,但它不起作用。这是我的代码:

$query = new WP_Query(array(\'showposts\'=>2, \'post__in\' => array(99,4,5,2,8,55), \'orderby\'=>\'none\'));
有人能帮我吗?

谢谢

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

Order by none不会做你认为它会做的事情。如果您没有指定顺序,那么MySQL不保证任何特定的顺序,只会以任何顺序获取帖子。因为它们是按特定顺序插入的,所以您可能会按该顺序得到它们。

由于您需要按照特定的顺序(在您的情况下,通过带有“99,4,5,2,8,55”的post id)发布帖子,因此如果没有更复杂的ORDERBY子句,mysql就无法做到这一点。具体来说,您必须将其用于mySQL语法:

ORDER BY FIELD($wpdb->posts.ID,99,4,5,2,8,55);
。。。这对于WordPress查询引擎来说并不容易。

您可以使用posts\\u orderby过滤器执行类似操作,代码如下:

function reorder_posts($orderby) {
    global $wpdb;
    return "ORDER BY FIELD({$wpdb->posts}.ID,99,4,5,2,8,55)";
}
add_filter(\'posts_orderby\', \'reorder_posts\');
您希望在查询之前添加过滤器,然后在查询之后删除它,以便不更改任何其他内容。

但这是一个硬编码的解决方案,您最好找到一种更通用的方法,而不是摆弄查询。通过WP\\U查询系统,可以将订单存储在元数据中,然后根据元数据进行选择,并根据meta\\u value\\u num进行排序。

编辑:注意,这刚刚被推到WordPress 3.5中,所以当它出来时,您可以使用\'orderby\'=>\'post__in\' (这是一个双下划线),它将使用中post\\uu的值进行排序。

此处购票:http://core.trac.wordpress.org/ticket/13729

此处修补程序:http://core.trac.wordpress.org/changeset/21776

SO网友:amit

看见Accepted Order & Orderby Parameters 用于WPQuery函数。只有ASCDESC 参数允许用于order.

$query = new WP_Query(array(\'showposts\'=>2, \'post__in\' => array(99,4,5,2,8,55), \'orderby\'=>\'none\'));
使用\'orderby\'=>\'none\'\'order\'=>\'none\'

结束

相关推荐

我应该如何截取主查询并注入定制连接/ORDER BY/GROUP BY条件

我有一个CPT,它是两个独立分类法的成员。在其中一种分类法的分类法归档页面上,我需要对第二种分类法进行进一步分组和排序,如下所示:我的网站。com/tax1/term1/tax2-term1-post-post-post[参见更多]tax2-term2-post-post-post[参见更多]。。。等更好的示例要提供更容易访问的示例,请考虑以下CPT:玩具。还有两种分类法:颜色和年龄组。在mysite的分类法归档页面上。com/colour/red,我需要对第二个分类法“年龄组”进行进一步分组,如下所示: