Wordpress WP_Query 删除 ORDER BY wp_posts.menu_order

Bye*_*oon 1 wordpress

我想按照我请求的顺序获取帖子。

幸运的是,有一个查询参数 -> orderby = 'post_name__in'。

但是,我以其他顺序收到帖子。

我看到了查询的请求。

这里

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID 
FROM wp_posts  
WHERE 1=1  
AND wp_posts.post_name 
IN (
  'post title 1',
  'post title 2',
  'post title 3',
  ) 
AND wp_posts.post_type = 'post' 
AND ((wp_posts.post_status = 'publish')) 
ORDER BY wp_posts.menu_order,
FIELD( 
  wp_posts.post_name, 
  'post title 1',
  'post title 2',
  'post title 3',
  ) 
LIMIT 0, 9
Run Code Online (Sandbox Code Playgroud)

我发现这ORDER BY wp_posts.menu_order是一个问题。

如果我删除它然后在 phpmyadmin 上查询,它运行良好。

我按照我想要的顺序收到帖子。

那么,如何ORDER BY wp_posts.menu_order使用 hook & filter 或其他一些 wordpressful 方式删除它?

Bye*_*oon 5

我找到了答案!

wp_posts.menu_order中因为添加文章类型订单插件。

在这个插件中,

add_filter('posts_orderby', array($this, 'posts_orderby'), 99, 2);
~
~
~
//check for ignore_custom_sort
if (isset($query->query_vars['ignore_custom_sort']) && $query>query_vars['ignore_custom_sort'] === TRUE)
    return $orderBy;
if(trim($orderBy) == '')
  $orderBy = "{$wpdb->posts}.menu_order " . $order;
else
  $orderBy = "{$wpdb->posts}.menu_order". $order .", " . $orderBy;
~
~
return $orderBy;
Run Code Online (Sandbox Code Playgroud)

所以,我添加$args['ignore_custom_sort'] = true到我的查询参数中。

这有效!