首页 > 解决方案 > Timber 使用了不正确的分页链接

问题描述

我正在尝试使用 Timber 的分页功能,但呈现的链接只是将我发送到 404 页面。这是我获取帖子列表的方式:

$posts = new Timber\PostQuery([
  'post_type' => 'event',
  'paged' => $paged,
  'posts_per_page' => 6,
]);
$context['posts'] = $posts;

以及我如何渲染它们:

{% if posts.pagination.pages is not empty %}
  <nav class="navigation" role="navigation">
    <ol class="pagination">
      {% if posts.pagination.prev %}
        {% include "wp/pagination/_pagination-link.twig" with {"class": posts.pagination.prev.class, "link": posts.pagination.prev.link, "title": "&larr;"} %}
      {% endif %}

      {% for page in posts.pagination.pages %}
        {% include "wp/pagination/_pagination-link.twig" with {"class": page.class, "link": page.link, "title": page.title} %}
      {% endfor %}

      {% if posts.pagination.next %}
        {% include "wp/pagination/_pagination-link.twig" with {"class": posts.pagination.prev.class, "link": posts.pagination.next.link, "title": "&rarr;"} %}
      {% endif %}
    </ol><!-- /.pagination -->
  </nav><!-- /.navigation -->
{% endif %}

当我访问该页面时,URL 路径是/event/,当我单击第二个/下一页按钮时,它链接到/event/page/2/,但 Wordpress 不运行相同的 php 文件 ( archive-event.php)。

如何配置分页链接?我可以切换它们以将页面放入查询中/event?page=2吗?

标签: phpwordpresstimber

解决方案


问题最终与重写规则有关。Wordpress 期望页面的长度10而不是6. 添加此以functions.php解决问题:

function get_events($query)
{
    if(!is_admin() && $query->is_main_query() && is_post_type_archive('event')) {
        $query->set('posts_per_page', '6');
    }
}
add_action('pre_get_posts', 'get_events');

推荐阅读