Як користуватися get_template_part ()?


25

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

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


1
Спробуйте подивитися codex.wordpress.org/Function_Reference/get_template_part
вау

Відповіді:


25

Ось тут дуже хороші вступні відповіді.

В основному, 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 .


2
Замініть шаблон locate_template цим, будь ласка. include(locate_template( 'loop-mycustomposttype.php')) Цей спосіб можливий для передачі змінних. Я знайшов це посилання тут . Це надзвичайно корисно!
Пабло С.Г. Пачеко

1
Якщо це зробити, знадобиться змінити це, якщо також. Ось такif ( false === include(locate_template( 'loop-mycustomposttype.php')) )
Пабло С.Г. Пачеко

1
О, хороший пункт. За формулою, яку я дав, requireабо require_oncecall (from locate_template) знаходиться всередині функції, тому не має доступу до поточної області.
goldenapples

5

Не всі петлі, основна петля. ;-) Незалежно від того, якщо ви подивитеся на свою титульну сторінку чи категорію чи хто знає, у вас завжди буде головний цикл. Вміст цього основного циклу визначається запитом, який виконувався до того, як ваш шаблон взагалі викликався.

Шаблон loop.php просто перебігає елементи в циклі і форматує їх. Дивіться документацію в Кодексі .

Якщо ви подивитесь на loop.php двадцяти десяти, ви можете побачити, що двадцять десять потім диверсифікується в одному файлі шаблону.

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

Або ви можете мати шаблон-шаблон для кожної окремої публікації в циклі, а ваш loop.php дзвонить лише get_template_part('loop','post');в while...пункті. Все залежить від вас.


3

З кодексу get_template_part :

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

зробить PHP потрібно () для першого файлу, який існує ...

Так ефективно він буде працювати так, ніби ви вимагаєте іншого файлу php.

Оновлення : Існує незначна різниця у тому, щоб "вимагати" - вона загорнута всередині функції, тому вам потрібно, globalякщо ви хочете передати будь-які змінні зі свого шаблону до вашої частини шаблону.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.