使用自定义查询的木材分页给我 404

Timber pagination with custom Query gives me 404

我有点像 Wordpress 的新手。 我在 Whosebug 上看了很多关于这个问题的解决方案,但 none 对我有用。 我正在使用 Timber 和 ACF。

情况如下:我定制了 4 个 post_type(新闻、产品、服务和地点)。我为新闻创建了一个自定义页面。 (页面-news.twig)

在我的 page.php 文件中,我添加了一个自定义查询,如下所示:

global $paged;

if (!isset($paged) || !$paged) {
    $paged = 1;
}

$context = Timber::get_context();
$post = new TimberPost();
$context['post'] = $post;

$args = array(
    'post_type' => 'news',
    'posts_per_page' => 3,
    'paged' => $paged,
    'page' => $paged
);

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

所以我为页面设置了最大帖子数,即 3,并且在我的 .twig 文件中:

    {% for single_news in news %}
{% include['news.twig', single_news] %}
{% endfor %}

{% if news.pagination.prev %}
<a href="{{news.pagination.prev.link}}" class="prev {{ news.pagination.prev.link|length ? '' : 'invisible'}}">Prev</a>
{% endif %}

{% if news.pagination.next %}
<a href="{{ news.pagination.next.link}}" class="next {{ news.pagination.next.link|length ? '' : 'invisible'}}">Next</a>
{% endif %}

当我转到新闻页面时,每页有 3 个帖子(正确),它显示 Next 锚是正确的。 问题是 link 将我带到不存在的 /news/page/2 并给我 404 错误。我已经尝试了很多解决方案,例如 pre_get_posts 和 none 对我有用。

分页仅适用于存档页面,但不适用于单个页面。请参阅 The WordPress Template Hierarchy 了解什么是存档页面。

这意味着您不能使用 page.php 作为显示新闻 post 的模板文件。这里有两种可能性:

  1. 您可以使用 archive.php,甚至可以使用 archive-news。php 如果您的自定义Post 新闻类型命名为 news
  2. 如果您使用默认 post 类型 post 作为您的新闻部分,您可以 select 您想要显示 post 档案的页面.显示您的 posts 存档的模板文件将是 home.php.

如果您选择第一个选项,则需要确保在注册 post 类型(通过 register_post_type() 或插件)时设置 public true 的选项并且您也将 has_archive 设置为 true

存档页面的问题在于,现在您无法使用页面通常具有的一些编辑功能。对于存档,您不能像用于页面一样使用编辑器设置标题或添加内容。但是,如果您使用 ACF,则可以设置一个 options page,在其中为您的 «Page for News» 添加一个 select。将其命名为 page_for_news 然后,在您的模板文件中,您可以 select Timber 应该在存档页面上使用

的正确 post
$post = new Timber\Post( get_field( 'page_for_news', 'option' ) );

此方法实际上复制了自定义 Post 类型的选项 2。

此外,有关您的新闻的提示 post 包含在 Twig 中:

{% for single_news in news %}
    {% include['news.twig', single_news] %}
{% endfor %}

如果您这样做,Twig 将尝试查找 news.twig 模板以及以 single_news 命名的模板。但是single_news在这里不是一个字符串,而是Timber\Post的一个实例。所以这对你没有帮助。您可以改用以下内容:

{% for single_news in news %}
    {% include 'news.twig' %}
{% endfor %}