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

时间:2018-11-06 11:26:06

标签: php wordpress twig timber

我是Wordpress的新手。 我在StackOverflow上寻找了很多解决此问题的方法,但没有一个对我有用。 我正在使用Timber和ACF。

这里是情况:我做了4个自定义post_type(“新闻”,“产品”,“服务”和“地点”)。我为新闻创建了自定义页面。 ( page-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锚点。 问题是该链接将我带到不存在的/news/page/2并给我404错误。我尝试了许多解决方案,例如pre_get_posts,但没有一个对我有用。

1 个答案:

答案 0 :(得分:2)

分页仅适用于存档页面,而不适用于单个页面。请参阅The WordPress Template Hierarchy,以了解哪些内容可以作为存档页面。

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

  1. 如果您的新闻自定义帖子类型名为news,则可以使用 archive.php ,甚至 archive-news.php
  2. 如果您的新闻部分使用默认的帖子类型post,则可以选择要显示帖子存档的页面。显示您的帖子存档的模板文件将是 home.php

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

存档页面的问题在于,现在您无法使用页面通常具有的某些编辑功能。对于存档,您无法像使用页面一样使用编辑器设置标题或添加内容。但是,如果您使用ACF,则可以设置options page,并在其中添加“新闻页面”的选择。将其命名为true,然后在

模板文件中,您可以选择Timber应该在存档页面上使用的适当帖子。
page_for_news

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

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

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

如果执行此操作,则Twig将尝试查找 news.twig 模板以及以{% for single_news in news %} {% include['news.twig', single_news] %} {% endfor %} 命名的模板。但是single_news在这里不是字符串,而是single_news的实例。所以这对您没有帮助。您可以改用以下内容:

Timber\Post