Использование функции get_template_part() в WordPress

01.05.2014

Если вы занимаетесь разработкой тем для 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.

Структура файлов в теме Twenty Twelve

Пользователям такой темы легко изменить вывод того или иного формата создав новый файл с определенным названием в дочерней теме 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.

Источник — http://wpmag.ru/2014/get_template_part/

Полезная инфа:

Оставить комментарий