使用自定义查询的木材分页给我 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 的模板文件。这里有两种可能性:
- 您可以使用 archive.php,甚至可以使用 archive-news。php 如果您的自定义Post 新闻类型命名为
news
。
- 如果您使用默认 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 %}
我有点像 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 的模板文件。这里有两种可能性:
- 您可以使用 archive.php,甚至可以使用 archive-news。php 如果您的自定义Post 新闻类型命名为
news
。 - 如果您使用默认 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 = 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 %}