【问题标题】:WordPress ignoring LIMIT / posts_per_page despite being in wp_query尽管在 wp_query 中,WordPress 忽略了 LIMIT / posts_per_page
【发布时间】:2015-03-24 20:52:57
【问题描述】:

使用 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)也有同样的问题。

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

【问题讨论】:

  • 什么是$instance['count']
  • 为什么你的查询是$myquery,而你循环的变量是$popularpost
  • 你应该在wordpress.stackexchange.com问这个
  • 尝试在 WP_Query 参数中设置paged => 1page => 1
  • $instance['count'] 是 5,道歉是一个错字 $myquery 正在循环播放 - 不是热门帖子。上面的帖子现在更正了。我也尝试过 paged => 1 和 page => 1,但不幸的是仍然返回 120 个结果。

标签: php mysql wordpress


【解决方案1】:

为了解决,只需从 WP_Query 中定义数组! 像这样:

$args=[
'category_name'  => '',
'posts_per_page' => $home_post_count,
'paged'          => $paged];

$query = new WP_Query($args);

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 'ignore_sticky_posts' 绝对是一个值得关注的有效建议。我以前也掉过这个陷阱。不过要小心将“paged”值硬编码为“1”。这个数字需要代表当前的分页页码。使用类似下面的值可能会更好:get_query_var('paged')
    • 是的,我应该提到“分页”选项的含义。就我而言,它应该是 1,因为我用它来在页面顶部显示粘性帖子,但对于正在寻找这个答案的人来说可能并非如此。感谢您添加此内容
    【解决方案3】:

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

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

    【讨论】:

    • 实际上,我认为这确实回答了这个问题,只是措辞的方式使您的肤浅阅读假定它是在要求澄清。
    • 我可以确认 $instance['count'] 是 5,echo 'Count: '.$instance['count'];返回计数:5
    猜你喜欢
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多