【问题标题】:Should I use $post = Timber::query_post() or $post = new TimberPost() in single wordpress template?我应该在单个 wordpress 模板中使用 $post = Timber::query_post() 还是 $post = new TimberPost() ?
【发布时间】:2017-12-10 09:28:25
【问题描述】:

我在官方 Timber 存储库上读到,关于使用的一般问题应该在这里发布。

我是 Timber/Twig 的新手,我有一个非常“基本”的问题。

在启动主题中,我看到在 single.php 中,传递给 $context 的 $post 变量设置为

$post = Timber::query_post()

page.php 设置为

$post = new TimberPost();

那么,当我需要设置一个single-cpt.php 时,我应该使用什么方法呢? Timber::query_post()new TimberPost()?

我都试过了,他们都在工作,但正确的方法是什么?

谢谢!

PS:我在index.php 中看到$context['post'] 正在与new Timber\PostQuery() 一起设置。这是否基本再现了模板层次结构的标准循环?

【问题讨论】:

    标签: wordpress-theming timber


    【解决方案1】:

    我知道对于使用哪些方法可能存在相当大的困惑。目前,有很多方法可以做到这一点,您尝试过的所有方法都应该有效。

    随着即将发布的 Timber 版本 2,我们尝试统一这一点,我们将弃用一些仍然存在的方法。所以,从现在开始,你应该这样做。


    2020 年 3 月更新 – 我们反复讨论了 2.x 的新 API 应该如何,我们提出了一个基本固定的解决方案。那里有些事情会发生变化,如果您想了解更多信息,可以查看此pull request

    在此之前,这是我们推荐的做事方式:


    获取单个帖子

    罢工>

    $post = new Timber\Post();
    

    $post = Timber::get_post();
    

    获取帖子集合

    罢工>

    $post = new Timber\PostQuery();
    

    $post = Timber::get_posts();
    

    如果您想在帖子中使用分页,您仍然必须使用Timber\PostQuery

    $post = new Timber\PostQuery();
    

    (在 Timber 2.x 中 Timber::get_posts() 可以使用分页,但在 1.x 中还不行。)

    标准循环

    我已经看到在 index.php 中 $context['post'] 正在使用 new Timber\PostQuery() 进行设置。这是否基本再现了模板层次结构的标准循环?

    是的!

    事实上,如果你不向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 );
    

    使用命名空间的类名

    目前,您可能仍会看到 TimberPost() 而不是 Timber\Post()。对于版本 1,所有 Timber 类都是命名空间的,所以从现在开始推荐的方法是在 PHP 中使用命名空间的类名,例如Timber\Term 而不是 TimberTerm

    但是!在 Twig 中,您仍然会使用非命名空间版本:

    {% set post = Post(post_id) %}
    

    {% set post = TimberPost(post_id) %}
    

    我希望这可以解决问题。

    【讨论】:

    • 谢谢@Gchtr,你的解释非常清楚! “从现在开始推荐的方法是使用 PHP 中的命名空间类名,例如 Timber\Term 而不是 Timber\Term”这句话有一个小错误。再次感谢:-)
    • 不客气!感谢您指出错误,我刚刚解决了这个问题。
    • 还有Timber::get_postsTimber::get_post这两个函数。它们与初始化 woodpost 或 postquery 对象有何不同?
    • @IngóVals 没有真正的区别。 Timber::get_post()Timber::get_postsTimber::query_post()Timber::query_posts() 的别名。这 4 个函数将在版本 2 中被弃用,取而代之的是 new Timber\Post()new Timber\PostQuery()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2011-01-18
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2016-05-25
    • 2018-12-18
    相关资源
    最近更新 更多