尽管在wp_query中,WordPress忽略了LIMIT / posts_per_page

时间:2015-01-26 12:31:37

标签: php mysql wordpress wp-query

使用WP查询:

$myquery = new WP_Query( array('posts_per_page' => $instance['count'], 'meta_key' => 'mywp_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC'  ) );

我们得到请求:

echo $myquery->request;

它返回:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND ( wp_postmeta.meta_key = 'mywp_post_views_count' ) GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value+0 DESC LIMIT 0, 5

这在MySQL中运行正常,给我5个帖子ID。但是WordPress会返回120个结果!

echo '$myquery = ' . count( $myquery->posts );

返回:$ myquery = 120

我在循环时检查过:

 while ( $myquery->have_posts() ) : $myquery->the_post();

它确实输出了120个独特的帖子,而不是预期的5个帖子。

我可以确认:

echo 'Count: '.$instance['count'];

返回:计数:5

我正在运行最新的稳定WordPress(4.1),除了ACF(高级自定义字段)之外没有插件 - 只是我的自定义主题。禁用此插件无效,默认WordPress主题(2015)也存在同样的问题。

我很难理解为什么会这样。

2 个答案:

答案 0 :(得分:2)

检查$instance['count']是否具有posts_per_page所需的值。例如,如果您想要5个帖子,$instance['count']应为= 5;

$instance['count'] = 5; //just for the sake of the test

答案 1 :(得分:0)

我知道 6 年前有人问过这个问题,但这仍然让我发疯,所以也许它会对某人有所帮助。我需要两个选项来让 posts_per_page 工作:

        'ignore_sticky_posts'   => true,
        'paged'                 => 1,

我尝试单独使用它们,但没有帮助,只有当两者都设置时一切正常。