Некоторые очень хорошие вводные ответы здесь.
По сути, 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()
действительно творит чудеса.
locate_template($template_names, $load = false, $require_once = true )
будет искать каждое из имен в массиве $ template_names в каталоге таблиц стилей, а затем в каталоге шаблонов. Передача 'true' в качестве аргумента $ load означает, что для этого потребуется первый найденный файл, и он вернет пустую строку, если файл шаблона не найден. Так что я могу сделать что-то вроде этого в моем плагине:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
include( 'loop-mycustomposttype.php' );
... что, надеюсь, позволит разработчикам темы очень легко настроить мой плагин, просто включив в свою тему файл loop-mycustomposttype.php .