Функция: get_template_part
Подключает указанный файл шаблона. Используется для загрузки часто повторяющегося кода шаблона, вынесенного в отдельные файлы. Также используется для загрузки секций кода родительского шаблона для текущего дочернего шаблона (полезно при мультисайтовости). Подключаемые файлы должны называться {slug}-{name}.php, где {slug} это основное имя подключаемого файла, а {name} дополнительное опциональное имя.
<?php get_template_part($slug, $name); ?> |
<?php get_template_part($slug, $name); ?>
$slug
(строка) (обязательный) основное имя подключаемого файла шаблона.
По умолчанию значения нет.
$name
(строка) (необязательный) дополнительное имя подключаемого файла шаблона.
По умолчанию значения нет.
1. Загрузка файла loop.php
Если вынести код цикла вывода записей в отдельный файл loop.php, то для его загрузки в нужных файлах шаблона необходимо использовать код:
<?php get_template_part('loop'); ?> |
<?php get_template_part('loop'); ?>
2. Использование файла loop.php родительского шаблона в дочернем шаблоне
Предположим, что шаблоны находятся в папке wp-content/themes, родительский шаблон расположен в папке twentyten, а дочерний шаблон в twentytenchild.
<?php get_template_part('loop', 'index'); ?> |
<?php get_template_part('loop', 'index'); ?>
Данный код, в соответствии с работой функции PHP require(), вернет первый существующий файл из возможных вариантов:
1. wp-content/themes/twentytenchild/loop-index.php 2. wp-content/themes/twentytenchild/loop.php 3. wp-content/themes/twentyten/loop-index.php 4. wp-content/themes/twentyten/loop.php |
1. wp-content/themes/twentytenchild/loop-index.php 2. wp-content/themes/twentytenchild/loop.php 3. wp-content/themes/twentyten/loop-index.php 4. wp-content/themes/twentyten/loop.php
Таким образом, если в текущем дочернем шаблоне не найдены файлы loop-index.php и loop.php, то они будут загружены из родительского шаблона. Если и в родительском шаблоне этих файлов не будет, то функция не будет ничего загружать.
3. Загрузка файла навигации nav.php
<?php get_template_part('nav'); ?> // будет загружен файл nav.php <?php get_template_part('nav', '2'); ?> // будет загружен файл nav-2.php <?php get_template_part('nav', 'single'); ?> // будет загружен файл nav-single.php |
<?php get_template_part('nav'); ?> // будет загружен файл nav.php <?php get_template_part('nav', '2'); ?> // будет загружен файл nav-2.php <?php get_template_part('nav', 'single'); ?> // будет загружен файл nav-single.php
Для разных страниц блога можно использовать разные файлы навигации. Например:
<?php if ( is_single() ) { get_template_part('nav', 'single'); } else { get_template_part('nav'); }?> |
<?php if ( is_single() ) { get_template_part('nav', 'single'); } else { get_template_part('nav'); }?>
Данный код загрузит файл nav-single.php на страницах одиночных записей и файл nav.php на всех остальных.
Функция добавлена в версии 3.0
Функция get_template_part() находится в wp-includes/general-template.php
Теги подключений: get_header, get_footer, get_sidebar, get_template_part, get_search_form, comments_template
Понравился пост? Подпишись на обновления по RSS или Twitter !
#1,
А в чем разница между get_header() и get_template_part('header')? Я просто не вижу различий, зачем пользоваться кучей разных функций, когда можно файлы шаблона подключать одной единственной функцией?
#2,
ну отличия есть, например в случае отсутствия в папке шаблона файла header.php get_template_part ничего не выведет, а get_header выведет встроенный в вордпресс дефолтный файл хидера. маленькое такое отличие, но есть.
с моей точки зрения, правильно все-таки будет использовать старые функции, а не get_template_part. даже в новых шаблонах от разработчиков вордпресса используются именно они.
да и функция эта относительно новая, появилась только в версии 3.0 - с них вполне станется изменить ее работу в следующих версиях, а тогда что, переделывать шаблон? ну на фиг.
#3,
А как самим созданный файл подключить на страницу?
#4,
а конкретнее?
#5,
В своей теме я создал свой файл home.php, он получается как главный теперь. Но мне нужно чтобы на определенной странице выводились последние посты как при использовании файла index.php. Я скопировал оригинальный файл index.php в index2.php. Теперь загвоздка как подключить его на страницу, пробую плагин Include Me, но он выдает ошибку "неправильная директория или такого файла нет".
Может как то шорткодом подключить файл index2.php?я нигде об этом в инете не нашел.
Или может более простой способ есть для вывода последних записей на страницу?
#6,
сдается мне вы не совсем то, что надо делаете. для чего вам home.php в шаблоне? создайте статическую страницу, поставьте ее вывод на главной странице блога в настройках. и там же в настройках вы можете определить статическую страницу, при клике на которую будет открываться архив с новостями блога.
это самое простое. просто не совсем понятно, что именно вы в итоге хотите получить.
#7,
home.php для создания своей главной, т.е. такую как я хочу. Если статистическая будет на главной из нее лепить что хочешь не получится. Тем более я уже все сделал, обратно возвращаться не хочется.
Теперь же мне надо на созданной странице сделать цикл Loop - последние статьи. Пробовал плагины(Include Me, Inline PHP), чтоб выполнить код php - выводит ошибки или не выполняет.
Неужели нет такого плагина который бы на странице выводил цикл loop!
#8,
да вон есть способ. только он не рекомендуемый совсем.
я бы на вашем месте сделал иначе. во-первых, создал бы главную рубрику - все остальные рубрики сделал бы ее подрубриками. обозвал бы ее "Новости" - тогда при клике на нее открывались бы последние записи из всех рубрик блога - то, что вам и надо.
все, что вам надо будет при этом поправить - это вывод в css рубрик и подрубрик - чтобы они в меню выглядели одинаково (в шаблонах обычно подрубрики выделяются).
#9,
а вообще - лучше бы вам переделать все со статической страницей на главной. для страниц можно задавать шаблоны. смотрите - создаете страницу "Test", копируете ваш home.php в page-test.php - заходите в редактирование страницы "Test" и выбираете шаблон страницы "page-test.php".
собственно, вот и все. и никаких больше танцев с бубном - хотите изменить главную страницу блога - меняйте page-test.php и все.
#10,
Отлично! спасибо! как то я не видел что шаблон для страниц можно свой. Значит так, сделал отдельный файл главной, указал это в настройках, но нужно еще указать страницу записей, копирую index.php в новый файл, создаю страницу, указываю этот новый файл в шаблоне. Но цикл loop все равно не работает, пробовал даже так
где index2.php - прописан только цикл loop.
Значит остается способ 1...
#11,
страница записей и без шаблона будет выводить записи.
создаете страницу "абракадабра" - с любым содержимым текста, а при клике на нее в меню вордпресс сам выведет там записи, проигнорировав ее содержимое.
не надо создавать специальную страницу, копируя ее index или еще какого файла, она должна быть обычной. это вы свою статическую на главной редактируйте шаблоном, а страница записей должна быть стандартной.
#12,
Фуф! спасибо огромное! и не думал, что в принципе это просто, я как обычно пошел лесом)) Это мои одни из первых сайтов на WP, поэтому у меня все сложно! Главное все получилось, я с начала года все искал способы.
Еще раз огромное, flector!
#13,
Здравствуйте! Помогите кто может! Кто может помогите!
Столкунулся с проблемой - в шаблоне "Workality Light" настроен поиск с выводом страницы поиска search.php, однако по непонятной причине при незаполненном поле поиска и нажатии кнопки "поиск" - выводтся страница шаблона Blog. Если кто сталкивался помогите! Нужно чтобы при таком варианте показывалась страница "Ничего не найдено". Заранее спасибо!
#14,
установил этот шаблон, попробовал поиск - все работает и при нахождении результатов поиска и при отсутствии результатов.
#15,
Здравствуйте Flector!
У меня при использовании функции get_template_part() возникла проблема с кодировкой.
Использую на сайте Office Responsive Business Theme.
В этой теме через функцию get_template_part() реализована вставка подписи автора поста author-bio:
<?php get_template_part('author-bio'); ?>
Я по аналогии создал sh-butt:
<?php get_template_part('author-bio'); ?>
Вывоз этих функций вставлен в шаблон по очереди, сначала sh-butt, затем author-bio.
Внутри author-bio.php:
<div class="author-info row">
<h4><?php printf( __( 'About %s', 'wpex' ), get_the_author() ); ?></h4>
<div class="author-info-inner boxed clr">
<div class="author-avatar">
<span class="author-link">
<?php echo get_avatar( get_the_author_meta( 'user_email' ), apply_filters( 'wpex_author_bio_avatar_size', 74 ) ); ?>
</span>
</div><!-- .author-avatar -->
<div class="author-description">
<p><?php the_author_meta( 'description' ); ?></p>
</div><!-- .author-description -->
</div><!-- .author-info-inner -->
</div><!-- .author-info -->
Внутри моего sh-butt.php:
<div class="sh-butt-begin"><i class="icon-llgr-smile share"></i>жмите на кнопки</div>
<div class="social-likes">
<div class="facebook" title="Поделиться ссылкой на Фейсбуке">Facebook</div>
<div class="twitter" data-via="likageorgieva" title="Поделиться ссылкой в Твиттере">Twitter</div>
<div class="mailru" title="Поделиться ссылкой в Моём мире">Mir</div>
<div class="vkontakte" title="Поделиться ссылкой во Вконтакте">VK</div>
<div class="odnoklassniki" title="Поделиться ссылкой в Одноклассниках">OK</div>
<div class="plusone" title="Поделиться ссылкой в Гугл-плюсе">Google+</div>
</div>
<script src="//dogshow.me/wp-content/themes/wpex-office/js/social-likes.min.js"></script>
В результате русские буквы из sh-butt.php меняют кодировку и отображаются вопросами, а в author-bio.php такой проблемы нет.
В чём может быть проблема?
Посмотреть можно на странице http://dogshow.me/faqs/kto-takoy-handler
Благодарю за ответ.
#16,
файлик свой sh-butt.php сохраните в кодировке "UTF без БОМ" и проблем с русским языком не будет.
#17,
Большое спасибо! Смена кодировки файла решила проблему. Что-то я об этом на ночь глядя не подумал.