我应该在单个 wordpress 模板中使用 $post = Timber::query_post() 还是 $post = new TimberPost() ?
Should I use $post = Timber::query_post() or $post = new TimberPost() in single wordpress template?
我在官方 Timber 存储库上读到关于使用的一般问题应该post在这里编辑。
我是 Timber/Twig 的新手,我有一个非常 "basic" 的问题。
在入门主题中,我看到在 single.php
中,传递给 $context 的 $post 变量设置为
$post = Timber::query_post()
而 page.php
则设置为
$post = new TimberPost();
那么,当我需要设置单机时,cpt.php应该使用什么方法呢? Timber::query_post()
或 new TimberPost()
?
我已经尝试了这两种方法并且它们都有效,但是正确的方法是什么?
谢谢!
PS:我在 index.php
中看到 $context['post']
正在使用 new Timber\PostQuery()
进行设置。这是否基本上重现了模板层次结构的标准循环?
我知道对于使用哪些方法可能会有一些混淆。目前,有很多方法可以做到这一点,您尝试过的都应该有效。
在即将推出的 Timber 版本 2 中,我们试图统一这一点,我们将弃用一些仍然存在的方法。所以,从现在开始你应该怎么做。
2020 年 3 月更新 – 关于 2.x 的新 API 应该如何,我们来回讨论了,我们已经提出了使用几乎固定的解决方案。有些东西会在那里改变,如果你想了解更多,你可以查看这个pull request。
在那之前,这是我们推荐的做事方式:
获得一个post
$post = new Timber\Post();
$post = Timber::get_post();
获取 post 的集合
$post = new Timber\PostQuery();
$post = Timber::get_posts();
如果您想对 post 使用 分页,您仍然需要使用 Timber\PostQuery
:
$post = new Timber\PostQuery();
(在 Timber 2.x Timber::get_posts()
中可以使用分页,但在 1.x 中还不行。)
标准循环
I've seen that in the index.php the $context['post'] is being setup with new Timber\PostQuery(). Does this basically reproduce the standard loop of the template hierarchy?
是的!
事实上,如果你不给PostQuery()
传递任何参数,你甚至不必设置$context['posts']
,因为Timber does that already for you in Timber::get_context()
.
index.php
<?php
use Timber\Timber;
$context = Timber::get_context();
Timber::render( 'index.twig', $context );
使用命名空间 class 名称
目前,您可能仍会看到 TimberPost()
而不是 Timber\Post()
。对于版本 1,所有 Timber classes 都是命名空间的,因此从现在开始推荐的方法是 使用 PHP[=81= 中的命名空间 class 名称],例如Timber\Term
而不是 TimberTerm
.
但是! 在 Twig 中,您仍然会使用非命名空间版本:
{% set post = Post(post_id) %}
或
{% set post = TimberPost(post_id) %}
我希望这能解决问题。
我在官方 Timber 存储库上读到关于使用的一般问题应该post在这里编辑。
我是 Timber/Twig 的新手,我有一个非常 "basic" 的问题。
在入门主题中,我看到在 single.php
中,传递给 $context 的 $post 变量设置为
$post = Timber::query_post()
而 page.php
则设置为
$post = new TimberPost();
那么,当我需要设置单机时,cpt.php应该使用什么方法呢? Timber::query_post()
或 new TimberPost()
?
我已经尝试了这两种方法并且它们都有效,但是正确的方法是什么?
谢谢!
PS:我在 index.php
中看到 $context['post']
正在使用 new Timber\PostQuery()
进行设置。这是否基本上重现了模板层次结构的标准循环?
我知道对于使用哪些方法可能会有一些混淆。目前,有很多方法可以做到这一点,您尝试过的都应该有效。
在即将推出的 Timber 版本 2 中,我们试图统一这一点,我们将弃用一些仍然存在的方法。所以,从现在开始你应该怎么做。
2020 年 3 月更新 – 关于 2.x 的新 API 应该如何,我们来回讨论了,我们已经提出了使用几乎固定的解决方案。有些东西会在那里改变,如果你想了解更多,你可以查看这个pull request。
在那之前,这是我们推荐的做事方式:
获得一个post
$post = new Timber\Post();
$post = Timber::get_post();
获取 post 的集合
$post = new Timber\PostQuery();
$post = Timber::get_posts();
如果您想对 post 使用 分页,您仍然需要使用 Timber\PostQuery
:
$post = new Timber\PostQuery();
(在 Timber 2.x Timber::get_posts()
中可以使用分页,但在 1.x 中还不行。)
标准循环
I've seen that in the index.php the $context['post'] is being setup with new Timber\PostQuery(). Does this basically reproduce the standard loop of the template hierarchy?
是的!
事实上,如果你不给PostQuery()
传递任何参数,你甚至不必设置$context['posts']
,因为Timber does that already for you in Timber::get_context()
.
index.php
<?php
use Timber\Timber;
$context = Timber::get_context();
Timber::render( 'index.twig', $context );
使用命名空间 class 名称
目前,您可能仍会看到 TimberPost()
而不是 Timber\Post()
。对于版本 1,所有 Timber classes 都是命名空间的,因此从现在开始推荐的方法是 使用 PHP[=81= 中的命名空间 class 名称],例如Timber\Term
而不是 TimberTerm
.
但是! 在 Twig 中,您仍然会使用非命名空间版本:
{% set post = Post(post_id) %}
或
{% set post = TimberPost(post_id) %}
我希望这能解决问题。