Должен ли я использовать $ post = Timber :: query_post () или $ post = new TimberPost () в одном шаблоне wordpress?

Я читал в официальном репозитории Timber, что здесь следует размещать общий вопрос об использовании.

Я новичок в Timber / Twig, и у меня есть очень «простой» вопрос.

В начальной теме я видел, что в single.php переменная $ 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(). Это в основном воспроизводит стандартный цикл иерархии шаблонов?


person Enrico Cassinelli    schedule 10.12.2017    source источник


Ответы (1)


Я понимаю, что может возникнуть некоторая путаница в том, какие методы использовать. В настоящее время есть много способов сделать это, и все, что вы пробовали, должно сработать.

В грядущей версии 2 Timber мы пытаемся унифицировать это и откажемся от некоторых методов, которые все еще существуют. Итак, вот как вы должны это делать с этого момента.


Обновление, март 2020 г.. Мы обсуждали, как должен понравиться новый API для 2.x, и нашли решение, которое в значительной степени исправлено. Там кое-что изменится, вы можете проверить этот 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 сделает это за вас в 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) %}

or

{% set post = TimberPost(post_id) %}

Надеюсь, это проясняет ситуацию.

person Gchtr    schedule 21.01.2018
comment
Спасибо @Gchtr, ваше объяснение было очень ясным! В предложении есть небольшая ошибка, рекомендуемый способ сделать это с этого момента - использовать имена классов в PHP в пространстве имен, например Timber \ Term вместо Timber \ Term. Спасибо еще раз :-) - person Enrico Cassinelli; 23.01.2018
comment
Пожалуйста! И спасибо, что указали на ошибку, я только что исправил это. - person Gchtr; 23.01.2018
comment
Также есть функции Timber::get_posts и Timber::get_post. Чем они отличаются от инициализации объекта timberpost или postquery? - person Ingó Vals; 01.07.2018
comment
@ IngóVals Нет особой разницы. Timber::get_post() и Timber::get_posts являются псевдонимами Timber::query_post() и Timber::query_posts(). Эти 4 функции будут устаревшими в версии 2 в пользу new Timber\Post() и new Timber\PostQuery(). - person Gchtr; 01.07.2018