Timber: 单个 post 分页不起作用 (wp_link_pages)

Timber: Single post pagination does not work (wp_link_pages)

我对 Timber 还很陌生,我正在尝试让单个 post 项目的分页正常工作。由于有很多关于档案分页的主题,我想强调这是关于单个 post 分页的,它处理 multi-page 单个 post 创建的 <!--nextpage--> 标签。在基本 WordPress/PHP 用法中,它在循环内用 wp_link_pages() 处理。

据我所知,通过搜索 SO 和其他网站,只需使用 post.pagination 数组就可以实现奇迹。但它在我的树枝文件中是空的(根据 Timber 文档,Timber\Post object 中根本不存在)。

我的 singular.php header 看起来像这样:

$context     = Timber::get_context();
$post_object = new Timber\Post();

这是我的树枝文件:

{% if post.pagination %}

    <nav>Pages:

        {% for page in post.pagination.pages %}

            {% if page.current %}

                <span class="current">{{ page.title }}</span>{{ loop.last ? '' : ', ' }}

            {% else %}

                <a href="{{ page.link }}">{{ page.title }}</a>{{ loop.last ? '' : ', ' }}

            {% endif %}

        {% endfor %}

    </nav>

{% endif %}

我做错了什么,我错过了什么,我怎样才能让单个 post 分页与 Timber 一起工作?

要使 wp_link_pages() 像您期望的那样工作,请将这些行添加到您的 singular.php

global $post, $page, $pages, $multipage;
setup_postdata( $post );

// setting up your context
$context         = Timber::context();
$context['post'] = new Timber\Post();

if ( $multipage ) {
    $context['post']->post_content = $pages[$page - 1];
}

然后在你的 twig 文件而不是 post.content 你应该写 post.paged_content 来获取页面内容

您没有正确地将 post 添加到上下文中:

$context = Timber::get_context();

$post            = new Timber\Post();
$context['post'] = $post;

另一个工具是 {{ dump( post.pagination) }},当启用 debuggin 时,它将打印变量的输出。

要使单个 post 分页 工作 Timber v1,您需要使用旧的 Timber::query_post() 函数而不是新的 Timber::get_post()

$context         = Timber::context();
$timber_post     = Timber::query_post(); // not Timber::get_post();
$context['post'] = $timber_post;

如果您这样做,那么这些应该会按预期工作:

{{ post.paged_content }}

Returns当前页的内容multi-pagepost。在没有分页符的 post 上,这将 return 完整内容。

{{ post.pagination }}

Returns Timber/Pagination 对象用于 multi-page post,或空数组用于 post 没有分页符。

你不需要这个,但它可能会有用。

if ( $multipage ) {
    $context['post']->post_content = $pages[$page - 1];
}

这段代码的重点是允许您使用 {{ post.content }} 而不是 {{ post.paged_content }}。否则{{ post.content }}会return整个post,即使有分页

备注

这仅适用于 Timber V1。我没有尝试过 Timber V2,因为它仍在开发中,但这个问题显然在该版本中已修复,并且 Timber::post_query 已被删除。

参考: