WP Кодекс говорит , чтобы сделать это:
// You wish to make $my_var available to the template part at `content-part.php`
set_query_var( 'my_var', $my_var );
get_template_part( 'content', 'part' );
Но как я могу echo $my_var
внутри части шаблона? get_query_var($my_var)
не работает для меня.
Я видел множество рекомендаций для использования locate_template
вместо этого. Это лучший путь?
variables
get-template-part
Florian
источник
источник
set_query_var
иget_query_var
, тем не менее это было для использования значений в$args
массиве , который передается кWP_Query
. Может быть полезно для других людей, начинающих изучать это.Ответы:
Поскольку сообщения получают свои данные через
the_post()
(соответственно черезsetup_postdata()
) и, следовательно, становятся доступными через API (get_the_ID()
например, для), давайте предположим, что мы выполняем цикл через набор пользователей (посколькуsetup_userdata()
заполняет глобальные переменные текущего пользователя, вошедшего в систему, и isn ' t полезно для этой задачи) и попробуйте отобразить метаданные для пользователя:Затем в нашем
wpse-theme/template-parts/user-contact_methods.php
файле нам нужно получить доступ к идентификатору пользователя:Вот и все.
Объяснение на самом деле точно выше той части, которую вы указали в своем вопросе:
Нативная
extract()
функция PHP «извлекает» переменные (global $wp_query->query_vars
свойство) и помещает каждую часть в свою собственную переменную, имя которой точно совпадает с именем ключа. Другими словами:источник
hm_get_template_part
Функция от humanmade очень хорош в этом , и я использую его все время.Ты звонишь
а затем внутри вашего шаблона, вы используете
вернуть значение. Это делает кэширование и все такое, хотя вы можете убрать это, если хотите.
Вы даже можете вернуть обработанный шаблон в виде строки, передав
'return' => true
в массив ключ / значение.источник
Я искал вокруг и нашел множество ответов. Кажется, на родном уровне Wordpress допускает доступ к переменным в частях шаблона. Я обнаружил, что использование include в сочетании с locate_template позволило сделать доступными переменные области в файле.
источник
include
не пройдет проверку темы .Рекомендую прочитать о функции PHP Extract ().
источник
Я столкнулся с той же проблемой в проекте, над которым я сейчас работаю. Я решил создать свой собственный небольшой плагин, который позволит вам более явно передавать переменные в get_template_part с помощью новой функции.
Если это может оказаться полезным, вот страница для этого на GitHub: https://github.com/JolekPress/Get-Template-Part-With-Variables
И вот пример того, как это будет работать:
источник
Я как стручки плагинов и их pods_view функции. Он работает аналогично
hm_get_template_part
функции, упомянутой в ответе djb. Я использую дополнительную функцию (findTemplate
в коде ниже), чтобы сначала найти файл шаблона в текущей теме, и если он не найден, он возвращает шаблон с тем же именем в/templates
папке моего плагина . Это грубое представление о том, как я используюpods_view
в своем плагине:pods_view
также поддерживает кэширование, но мне это не нужно для моих целей. Дополнительную информацию об аргументах функции можно найти на страницах документации Pods. См. Страницы для pods_view и частичного кэширования страниц и частей смарт-шаблонов с модулями .источник
Основано на ответе @djb с использованием кода от человека.
Это облегченная версия get_template_part, которая может принимать аргументы. Таким образом, переменные локально ограничиваются этим шаблоном. Нет необходимости иметь
global
,get_query_var
,set_query_var
.Например в
cart.php
:В
apple.php
:источник
Как насчет этого?
Используя
${$key}
вы можете добавить переменные в текущую область функции. Работает для меня, быстро и легко, и это не протекает и не сохраняется в глобальном масштабе.источник
Для тех, кто ищет очень простой способ передачи переменных, вы можете изменить функцию, включив в нее:
И тогда вы сможете использовать все переменные, которые определены до того, как вы включите шаблон, без дополнительной PASSING, каждая из которых для шаблона.
Кредиты отправляются по адресу : https://mekshq.com/passing-variables-via-get_template_part-wordpress/
источник
Это точное решение, и оно сработало хорошо. https://developer.wordpress.org/reference/functions/set_query_var/
источник