自定义wp_查询分页-NEXT_POST_LINK()或wp_Pagenavi()始终为空

时间:2013-12-17 作者:waffl

我知道这是一个讨论到了极点的话题,但我已经阅读了许多解决方案,无法理解为什么我的分页根本不起作用。

我有一个非常简单的自定义wp\\U查询:

$current_page = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

$project_query = new WP_query(array(
  \'post_type\' => \'project\',
  \'paged\' => $current_page,
  \'posts_per_page\' => 50
));
大约有2000 项目在那里,所以毫无疑问,有页面。

这是我的index.php 主题的。

不管怎样,URL/p/pageno 返回404。功能next_posts_link(\'Older Entries »\', $project_query->max_num_pages); 始终为空。

基于阅读了几个类似的问题,我尝试过:

将阅读设置设置为一次最多显示一个帖子,以确保分页生效

  • 安装wp\\u pagenavi-相同的结果将主页设置为静态页面,并在自定义页面模板中使用此代码-这最终会在一定程度上起作用(/p/2 etc不要404),但是next_posts_link() 停在第2页,不再继续get_query_var(\'paged\') 到get_query_var(\'page\') 在自定义页面模板中重命名$project_query$wp_query
  • 我不知所措,这应该很简单,但在使用Wordpress时,分页似乎总是让我头疼的一件事。

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

    我认为大多数分页问题源于对查询和模板加载过程的误解,这种误解发生在您在模板文件中执行代码之前。

    当有人请求页面时:

    WordPress解析请求并根据传入的URL决定其用途。例如,它是否是主根页面,是否以category, 它是否匹配单个帖子的模式,是否有页码等。。在此过程中设置了正确的查询变量。

    WordPress使用上一步中设置的查询变量在数据库上运行主查询。

    WordPress查看主查询的结果,并确定它是成功的还是没有结果。如果成功,WordPress将为该类型的请求加载正确的模板,否则将加载404模板。

    如果上述一切都按预期进行,那么现在您终于进入了模板。但是现在我们可以看到一个问题的根源——如果主查询没有结果,您将永远无法访问模板来运行自定义查询。该主查询与模板中的自定义查询没有关系。如果自定义查询在主查询中没有相应的页面,则该页码的结果是否与此无关。在这种情况下,答案是在主查询发生之前通过pre_get_posts, 要进行该查询,请提供所需的结果,而不是在模板中运行另一个查询。

    您在问题中提到的另一个选项是使用静态页面。这是与主查询相关的上述行为的例外情况-无论您在URL中设置了什么页码,静态页面都将返回单个页面的内容。这就是如何通过主查询解决404问题的方法。在这种情况下,您必须在使用下一篇/上一篇文章链接函数时引用正确的查询对象,正如Kaiser在回答中提到的那样。

    SO网友:kaiser

    您的主要问题是:

    您没有打开错误报告/调试:WP_Query vs。WP_query...

    $project_query = new WP_Query( array(
      \'post_type\'      => \'project\',
      \'paged\'          => get_query_var(\'paged\') ? get_query_var(\'paged\') : 1,
      \'posts_per_page\' => 50
    ) );
    var_dump( get_next_posts_link( "Older Entries →", $project_query->max_num_pages ) );
    

    结束

    相关推荐

    Pagination for event query

    我正在使用Modern Tribe Events Calendar我的问题是分页。这是对WP\\U查询分页的错误方式,还是有其他方法可以对事件日历分页?我找到了一个tutorial 这使用了WPNavi插件,但我想使用核心wordpress函数。<?php $upcoming = new WP_Query(); $upcoming->query( array( \'post_type\'=> \'tribe_events\', \'eve