Если вы занимаетесь разработкой тем для WordPress, то вы наверняка встречались с функцией get_template_part()
, которая позволяет легко разбить шаблоны темы на несколько файлов. В данной статье мы рассмотрим возможности и некоторые особенности данной функции.
Функция get_template_part()
впервые появилась в WordPress версии 3.0. Она предназначена для поиска и подключения разных частей шаблона и похожа на внутренние функции PHP include()
или require()
, но с некоторыми отличиями:
get_template_part()
знает где находится директория с вашими темами- Функция не вызовет ошибок или предупреждений PHP в случае, если запрашиваемый файл не найден
- Функция
get_template_part()
может подключить альтернативный файл в случае если, первоначально запрашиваемый файл не найден - Функция прекрасно работает с дочерними темами в WordPress
Основы get_template_part()
Чаще всего функция get_template_part()
используется для внедрения какой-либо части шаблона в теме WordPress (откуда и название), например навигационное меню, блок со схожими записями, пагинация и так далее.
Рассмотрим несколько простых примеров:
get_template_part( 'navigation' );
Данный код выполнит поиск файла navigation.php в активной теме WordPress, и подключит его. В отличие от include()
или require()
, функция get_template_part()
не вызовет ошибок или предупреждений, если файл с таким названием не найден.
У функции есть так же второй необязательный аргумент:
get_template_part( 'navigation', 'header' );
Данный код выполнит и подключит файл navigation-header.php в активной теме. Если файл с таким названием не существует, то get_template_part()
попытается подключить файл navigation.php.
Дочерние темы
В дочерних темах работа с функцией get_template_part()
становится немного сложнее. Например:
get_template_part( 'breadcrumbs' );
Если в момент вызова данной функции на сайте активна дочерняя тема, то поиск файла breadcrumbs.php произойдет сперва в дочерней теме. Если файл с таким названием в дочерней теме отсутствует, то функция попытается подключить файл breadcrumbs.php в родительской теме.
get_template_part( 'breadcrumbs', 'header' );
При таком вызове из дочерней темы, поиск и подключение файлов произойдет в следующем порядке:
- breadcrumbs-header.php в дочерней теме
- breadcrumbs-header.php в родительской теме
- breadcrumbs.php в дочерней теме
- breadcrumbs.php в родительской теме
Таким образом, если вы разрабатываете тему для WordPress, вы можете дать возможность пользователям легко изменить или предотвратить вывод хлебных крошек в определенных участках темы. Для этого пользователям нужно будет лишь создать файл с определенным именем в дочерней теме.
Форматы записей
Начиная со стандартной темы Twenty Eleven, при выводе содержимого записей в шаблонах используется функция get_template_part()
вместе с функцией get_post_format()
, которая возвращает формат текущей записи в виде строки:
get_template_part( 'content', get_post_format() );
Данный подход позволяет разделить вывод разных форматов записей на разные файлы, например content-gallery.php для галерей, content-quote.php для цитат, content-image.php для изображений и т.д. Если тот или иной файл не существует, WordPress будет искать файл с названием content.php.
Пользователям такой темы легко изменить вывод того или иного формата создав новый файл с определенным названием в дочерней теме WordPress.
Функция locate_template()
Функция get_template_part()
, как и многие другие функции для работы с файлами шаблонов WordPress (в том числе get_header()
, get_sidebar()
, get_footer()
и другие) использует функцию ядра locate_template()
. Именно эта функция позволяет выбрать и загрузить первый попавшийся файл из заданного массива в дочерней или родительской теме WordPress:
locate_template( array( 'foo.php', 'bar.php', 'baz.php', ) );
Данный код выполнит поиск файлов в следующем порядке:
- foo.php в дочерней теме
- foo.php в родительской теме
- bar.php в дочерней теме
- bar.php в родительской теме
- baz.php в дочерней теме
- baz.php в родительской теме
Учтите, что в отличие от функции get_template_part()
, функция locate_template()
требует полное название файлов в массиве, включая расширение .php. Именно функция locate_template()
позволяет реализовать иерархию шаблонов в темах для WordPress.
Если у вас возникли вопросы по работе с функцией get_template_part()
, оставьте комментарий и мы обязательно вам ответим. Если вам интересно узнать подробности реализации упомянутых функций, советуем взглянуть на файлы template.php и general-template.php в ядре WordPress.