Философия Timber по отделению данных от разметки требует значительного концептуального сдвига по сравнению со стандартной архитектурой шаблонов Wordpress.
Корень вашей проблемы в том, что вы воспринимаете свой заголовок как шаблон когда это на самом деле частичное .
В терминах Timber шаблон соответствует записи или архиву и состоит из двух файлов:
Файл Twig со смешанной разметкой htmlс некоторыми переменными и логикой, и PHP-файл, который, как минимум, определяет следующее:
- Контекст Timber для данного поста, созданный с помощью
Timber::context()
(ранее get_context()
, который устарел) - Какой файл ветки (или файлы) следует использовать для визуализации шаблона
Самый простой файл шаблона Timber PHP может выглядеть следующим образом:
<?php
/*
* This is the `single.php` template
*/
$context = Timber::context();
Timber::render( 'single.twig', $context );
Это сгенерирует отображаемое содержимое single.twig
вместе с некоторыми глобальными значениями контекста.Чтобы передать реальные значения в шаблон, вы должны присвоить их $context
, как вы пытались это сделать с $context['idagency_very_top_header_phone']
и т. Д. Однако эти значения не могут быть назначены на уровне частичного - они должны бытьназначается на уровне шаблона или выше.
Чтобы сделать то, что вы пытаетесь сделать, вам нужно будет настроить шаблон (например, single.php
и single.twig
), а затем включить *Файл 1030 * внутри файла шаблона Twig с использованием {% include 'header.twig' %}
.
Затем необходимо определить значения контекста, чтобы они были доступны для single.twig
и всех включенных в него партиалов, которые в этом случае будут включать header.twig
.Вы можете определить их непосредственно в файле single.php
после определения $context
.Для простоты я определяю только одно из ваших значений:
/* single.php */
$context = Timber::context();
$idagency_very_top_header_phone = get_theme_mod(
'idagency_very_top_header_phone',
esc_html__( '(+9) 0999.500.400', 'idweb')
);
$context['idagency_very_top_header_phone'] = $idagency_very_top_header_phone;
Timber::render( 'single.twig', $context );
Если вам нужно, чтобы эти значения были глобальными для всех шаблонов, вы также можете определить их в functions.php
вашей темы с помощью (плохо документировано) timber/context
фильтр.Тогда значения будут доступны в любом шаблоне, где используется это Timber::context()
:
/* This would be placed in your functions.php file
* (or a separate file that's been included in functions.php)
*/
add_filter( 'timber/context', function( $context ) {
$idagency_very_top_header_phone = get_theme_mod(
'idagency_very_top_header_phone',
esc_html__( '(+9) 0999.500.400', 'idweb')
);
$context['idagency_very_top_header_phone'] = $idagency_very_top_header_phone;
return $context;
} );
Это оставляет некоторые ключевые шаги для настройки полного шаблона, такие как включение данных из фактического поста, но этовсе прилично документировано в Руководстве по началу работы с Timber .
Ключ, точки TL; DR:
- Контекст Timberопределяется один раз для сообщения
- Контекст и все его значения передаются непосредственно из шаблона PHP сообщения в его шаблон Twig
- Частицы Twig напрямую не связаны с частичными файлами PHP.
- Частицы, включенные в шаблон Twig, наследуют контекст Timber от этого шаблона.То же самое касается партиалов, вложенных в эти партиалы.