Как использовать get_template_part ()?
-
-
Попробуйте посмотреть http://codex.wordpress.org/Function_Reference/get_template_partTry look at http://codex.wordpress.org/Function_Reference/get_template_part
- 1
- 2011-02-21
- wow
-
3 ответ
- голосов
-
- 2012-02-08
Здесь есть несколько очень хороших вводных ответов.
По сути,
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 .
Some very good introductory answers here.
Basically,
get_template_part()
allows theme developers to set up an order of specificity of template files. Think of it similarly to specificity as it applies to CSS selectors. When designing something, you want to start with the bare minimum of specificity, so that it can be easily overridden in parts of a design that need individual attention.So for example, you're styling a blog and you create a loop.php file which works well for marking up posts. But you plan ahead, and you call it in your template files later with additional context specifiers - say, on the index page, you call
get_template_part( 'loop', 'index' );
, on the single template, you callget_template_part( 'loop', 'single' );
, on archive pages, you callget_template_part( 'loop', 'archive' );
, and so on. This makes it very easy down the road when you decide to mark up the loop on your archive pages differently from the home page: just create a loop-archive.php template and it'll be used rather than the generic loop.php.But the magic behind
get_template_part()
is in the functionlocate_template()
, which checks first the theme directory, then the parent directory (if one exists) for the file named. This is very useful for plugin development. In one of my plugins, I define a custom post type and created a loop template file for that custom post type in my plugin directory. But... I want to allow themes using my plugin to override my markup if they choose. This is wherelocate_template()
really works wonders.locate_template($template_names, $load = false, $require_once = true )
will look for each of the names in the $template_names array in the stylesheet directory, then in the template directory. Passing 'true' as the $load argument means that it will require the first file found, and will return an empty string if no template file was located. So I can do something like this in my plugin:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' );
...which should hopefully make it very easy for theme developers to customize my plugin just by including a file called loop-mycustomposttype.php in their theme.
-
Замени,пожалуйста,locate_template этим. `include (locate_template ('loop-mycustomposttype.php'))` Таким образом можно передавать переменные. Я нашел это здесь [ссылка] (http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/).Это очень полезно!Replace locate_template by this, please. `include(locate_template( 'loop-mycustomposttype.php'))` This way is possible to pass variables. I've found this here [link](http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/). It's extremely useful!
- 2
- 2014-01-09
- Pablo S G Pacheco
-
При этом необходимо будет изменить это,если также.Как этот `if (false===include (locate_template ('loop-mycustomposttype.php')))`Doing so it's going to be necessary to change this if also. Like this `if ( false === include(locate_template( 'loop-mycustomposttype.php')) ) `
- 1
- 2014-01-09
- Pablo S G Pacheco
-
О,хороший момент.В приведенной мной формуле вызов require или require_once (из locate_template) находится внутри функции и поэтому не имеет доступа к текущей области.Oh, good point. With the formula I gave, the `require` or `require_once` call (from `locate_template`) is inside a function and so doesn't have access to the current scope.
- 1
- 2014-01-10
- goldenapples
-
- 2011-02-21
Не все циклы,основной цикл. ;-) Независимо от того,смотрите ли вы на свою главную страницу или категорию,или кто знает что,у вас всегда будет основной цикл. Содержимое этого основного цикла определяется запросом,который был запущен до того,как ваш шаблон вообще был вызван.
Шаблон loop.php просто просматривает элементы цикла и форматирует их. См. документацию Кодекса .
Если вы посмотрите на loop.php Twenty-Ten,вы увидите,что Twenty-Ten затем диверсифицирует внутри этого единственного файла шаблона.
get_template_part()
просто загружает часть шаблона и просматривает ее. Вы также можете извлечь части вашего loop.php в отдельные файлы и заменить их вызовамиget_template_part('loop', 'category')
и т. Д.Или у вас может быть частичный шаблон для каждой отдельной публикации в цикле,и ваш loop.php будет вызывать только
get_template_part('loop','post');
внутриwhile...
. Все зависит от вас.Not all loops, the main loop. ;-) No matter if you look at your frontpage or a category or whoknowswhat, you'll always have a main loop. The content of that main loop is determined by the query that's been run before your template got called at all.
The loop.php template merely runs over the items in the loop and formats them. See the documentation at the Codex.
If you look at Twenty-Ten's loop.php, you can see that Twenty-Ten then diversifies within that single template file.
get_template_part()
merely loads a template part and runs through it. You can just as well extract parts of your loop.php into separate files and replace them by aget_template_part('loop', 'category')
and so on calls.Or you could have a part-template for each individual post in the loop and have your loop.php only call
get_template_part('loop','post');
within thewhile...
clause. All up to you. -
- 2012-02-08
<цитата><?php get_template_part( 'loop', 'index' ); ?>
выполнит PHP require () для первого существующего файла ...
Таким образом,он будет работать так,как будто вам нужен еще один файлphp.
Обновление : есть небольшое отличие от "require" - он заключен внутри функции,поэтому вы должны
global
,если хотите передать какие-либо переменные из вашего шаблона вчасть вашего шаблона.From the get_template_part codex:
<?php get_template_part( 'loop', 'index' ); ?>
will do a PHP require() for the first file that exists...
So effectively it will work as if you were requiring another php file.
Update: There is a slight difference to 'require' - It is wrapped inside a function so you must
global
if you want to pass any variables from your template to your template part.
Не могли бы кто-нибудь объяснить мне,как работает эта функция?Я знаю,что он делает,но когда я смотрю на исходный код в шаблоне 20_ten,я не понимаю,как все циклы собираются в один-единственный loop.php (я тоже видел этот файл).
Так как,например,абстрагироваться от определенной общей части шаблона,а затем повторно использовать ее в других шаблонах?