Timber - 分页不适用于默认的 Wordpress 查询

分享于2022年07月17日 php timber twig wordpress 问答
【问题标题】:Timber - 分页不适用于默认的 Wordpress 查询(Timber - Pagination didn't work with default Wordpress query)
【发布时间】:2022-06-23 21:15:18
【问题描述】:

我正在尝试在博客页面上的默认查询中显示分页。 所以我有这个代码叫做 home.php 的文件

 'published',
    'posts_per_page' => 2,
    'paged' => (get_query_var('paged')) ? get_query_var('paged') : 1,
    'offset' => 1,
];
$context['posts'] = Timber::get_posts($args);

$argsNewest = [
    'posts_per_page' => 1,
    'offset' => 0,
];
$context['latest'] = Timber::get_posts($argsNewest);

Timber::render('page-home.twig', $context);

在 page-home.twig 中我试图显示我的分页但没有任何成功。

{% include 'partial/pagination.twig' with { pagination: posts.pagination({show_all: false, mid_size: 3, end_size: 2}) } %}

另一件奇怪的事情是,当我尝试转储 {{ dump(posts) }} 之类的帖子时,它不起作用,但像 {% for post in posts %} 这样的循环工作正常,我可以显示帖子。

所以我的问题:

  1. 为什么我的分页不起作用?
  2. 为什么我的转储不工作但循环正常?


【解决方案1】:
  1. 您可以使用 pre_get_posts 过滤器,以便使用默认的 WP_Query。

在您的 functions.php 文件中,添加此代码(或附加到现有的 pre_get_posts 过滤器)

function modify_blog_posts_query($query) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', 2 );
        $query->set( 'paged', (get_query_var('paged')) ? get_query_var('paged') : 1 );
        $query->set( 'offset', 1 );
    }
}
add_action( 'pre_get_posts', 'modify_blog_posts_query' );

您可能需要在代码顶部添加 use Timber\PostQuery;

在你的 home.php 文件中,替换

$args = [
    'post_staus' => 'published',
    'posts_per_page' => 2,
    'paged' => (get_query_var('paged')) ? get_query_var('paged') : 1,
    'offset' => 1,
];
$context['posts'] = Timber::get_posts($args);

$context['posts'] = new Timber\PostQuery();

请参阅 https://timber.github.io/docs/guides/pagination/ ,了解如何在 Twig 中使用分页。 有关 pre_get_posts 过滤器的更多信息,请参阅 https://developer.wordpress.org/reference/hooks/pre_get_posts/

  1. 对于转储功能,请使用上面的新代码再次尝试 Twig 转储功能。