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