Может кто-нибудь объяснить мне, как работает эта функция? Я знаю, что он делает, но когда я смотрю на исходный код в шаблоне двадцати_тенн, я не понимаю, как все циклы собираются в один и тот же loop.php (я тоже видел этот файл).
Так как же, например, абстрагировать определенную общую часть шаблона и затем повторно использовать ее в других шаблонах?
get-template-part
Амит Эрандол
источник
источник
Ответы:
Некоторые очень хорошие вводные ответы здесь.
По сути,
get_template_part()
позволяет разработчикам темы устанавливать порядок специфичности файлов шаблонов. Думайте об этом так же, как о специфике, поскольку это относится к селекторам CSS. При проектировании чего-либо вы должны начать с минимума специфики, чтобы его можно было легко переопределить в тех частях дизайна, которые требуют индивидуального внимания.Например, вы разрабатываете блог и создаете файл loop.php, который хорошо подходит для разметки постов. Но вы планируете заранее и позже вызываете его в своих файлах шаблонов с дополнительными спецификаторами контекста - скажем, на странице индекса вы звоните
get_template_part( 'loop', 'index' );
, на одном шаблоне, который вы вызываетеget_template_part( 'loop', 'single' );
, на страницах архива, вы звонитеget_template_part( 'loop', 'archive' );
и так далее. Это очень облегчает процесс, когда вы решите разметить цикл на страницах архива не так, как на домашней странице: просто создайте шаблон loop-archive.php, и он будет использоваться вместо универсального loop.php .Но магия
get_template_part()
заключается в функцииlocate_template()
, которая сначала проверяет каталог темы, а затем родительский каталог (если он существует) для файла с именем. Это очень полезно для разработки плагинов. В одном из моих плагинов я определяю пользовательский тип поста и создал файл шаблона цикла для этого пользовательского типа поста в моей директории плагинов. Но ... я хочу разрешить темам, использующим мой плагин, переопределить мою разметку, если они захотят. Здесьlocate_template()
действительно творит чудеса.будет искать каждое из имен в массиве $ template_names в каталоге таблиц стилей, а затем в каталоге шаблонов. Передача 'true' в качестве аргумента $ load означает, что для этого потребуется первый найденный файл, и он вернет пустую строку, если файл шаблона не найден. Так что я могу сделать что-то вроде этого в моем плагине:
... что, надеюсь, позволит разработчикам темы очень легко настроить мой плагин, просто включив в свою тему файл loop-mycustomposttype.php .
источник
include(locate_template( 'loop-mycustomposttype.php'))
Таким способом можно передавать переменные. Я нашел эту ссылку здесь . Это чрезвычайно полезно!if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
require
orrequire_once
(fromlocate_template
) находится внутри функции и поэтому не имеет доступа к текущей области.Не все петли, основной цикл. ;-) Независимо от того, смотрите ли вы на главной странице или в категории, или кто знает, у вас всегда будет основной цикл. Содержимое этого основного цикла определяется запросом, который был выполнен до того, как ваш шаблон был вызван вообще.
Шаблон loop.php просто запускает элементы цикла и форматирует их. Смотрите документацию в Кодексе .
Если вы посмотрите на Twenty-Ten's loop.php, вы увидите, что Twenty-Ten затем диверсифицируется в пределах одного файла шаблона.
get_template_part()
просто загружает часть шаблона и проходит через нее. Вы также можете извлечь части вашего loop.php в отдельные файлы и заменить ихget_template_part('loop', 'category')
вызовами a и т. Д.Или вы могли бы иметь шаблон части для каждого отдельного сообщения в цикле и иметь только свой loop.php вызов
get_template_part('loop','post');
вwhile...
предложении. Все зависит от вас.источник
Из кодекса get_template_part :
Так эффективно это будет работать так, как будто вам нужен еще один php-файл.
Обновление : есть небольшая разница с 'require' - он заключен в функцию, поэтому вы должны,
global
если хотите передать какие-либо переменные из вашего шаблона в вашу часть шаблона.источник