amiterandole
  • 0
Учитель

Как использовать get_template_part()?

  • 0

Может кто-нибудь объяснить мне, как работает эта функция? Я знаю, что он делает, но когда я смотрю на исходный код в шаблоне двадцать_тен, я не понимаю, как все циклы собираются в один файл loop.php (я тоже видел этот файл).

Итак, как, например, абстрагироваться от определенной общей части шаблона, а затем повторно использовать ее в других шаблонах?

Share
  1. Некоторые очень хорошие вводные ответы здесь.

    По сути, 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.

    • 0
  2. Не все петли, основная петля. 😉 Независимо от того, смотрите ли вы на свою главную страницу, категорию или черт знает что, у вас всегда будет основной цикл. Содержимое этого основного цикла определяется запросом, который был запущен до того, как ваш шаблон вообще был вызван.

    Шаблон loop.php просто перебирает элементы в цикле и форматирует их. См . документацию в Кодексе.

    Если вы посмотрите на loop.php Twenty-Ten, вы увидите, что Twenty-Ten затем диверсифицирует этот единственный файл шаблона.

    get_template_part() просто загружает часть шаблона и проходит через нее. Вы также можете извлечь части вашего loop.php в отдельные файлы и заменить их get_template_part('loop', 'category') вызовами a и т.д.

    Или у вас может быть шаблон части для каждого отдельного сообщения в цикле, и ваш loop.php вызывается только get_template_part('loop','post'); внутри while... предложения. Все зависит от вас.

    • 0
  3. Из кодекса get_template_part :

    <?php get_template_part( 'loop', 'index' ); ?>

    сделает PHP require() для первого существующего файла…

    Таким образом, он будет работать так, как если бы вам требовался другой файл php.

    Обновление : есть небольшое отличие от «требовать» — оно обернуто внутри функции, поэтому вы должны это сделать, global если хотите передать какие-либо переменные из своего шаблона в свою часть шаблона.

    • 0

Оставить ответ

You must login to add an answer.