WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

get_template_part() WP 3.0

Ищет и подключает указанный файл темы. Похожа на PHP функцию include(), только не нужно указывать путь до темы.

Обычно эта функция используется для подключения файла (части шаблона) в сам шаблон, например для подключения файла отвечающего за: хлебные крошки, меню навигации, блок ссылок пагинации, цикл вывода постов и так далее. Рассмотрим пример:

// подключит файл breadcrumbs.php из каталога текущей темы
get_template_part( 'breadcrumbs' ); 

// подключит файл breadcrumbs-footer.php из каталога текущей темы
get_template_part( 'breadcrumbs', 'footer' ); 

Если файла указанного для подключения не существует, то функция ничего не подключит и не вызовет никаких PHP ошибок.

Дочерние темы

При использовании дочерних тем эта функция сначала попробует подключить файл из дочерней темы, если его нет, будет подключен файл из родительской темы.

Использование этой функциональности при разработке тем, позволяет пользователям этих тем переопределять файлы темы в дочерней теме, а это в свою очередь дает возможность полноценно использовать дочерние темы и не изменять файлы основной темы, чтобы при обновлении изменения не слетели. Для этого пользователю нужно просто создать файл с соответствующим именем в дочерней теме.

Работает на основе: locate_template()
1 раз = 0.000044с = очень быстро | 50000 раз = 0.16с = очень быстро | PHP 7.1.2, WP 4.7.3
Хуки из функции
Возвращает

null/false. null при удачном подключении файла, false если файла шаблона не существует.

Использование

get_template_part( $slug, $name, $args );
$slug(строка) (обязательный)
Название файла, который нужно подключить.
$name(строка)
Дополнительное название файла. Тоже самое, что параметр $name в функциях get_footer(), get_header() и т.п.
По умолчанию: null
$args(массив) (с 5.5.0)
Дополнительные параметры для подключаемого файла. Используйте переменную $args в подключаемом файле.
По умолчанию: array()

Примеры

#1 Использование файла loop.php в дочерней теме

Подразумевается что шаблоны лежат в каталоге wp-content/themes и родительская тема называется twentyten, а дочерняя twentytenchild, тогда следующий код будет пытаться подключить файлы в следующем порядке:

<?php get_template_part( 'loop', 'index' ); ?>
  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

#2 Подключение навигации в шаблон с использованием файла nav.php

get_template_part( 'nav' );           // Navigation bar (nav.php) ?>
get_template_part( 'nav', '2' );      // Navigation bar #2 (nav-2.php) ?>
get_template_part( 'nav', 'single' ); // Navigation bar to use in single pages (nav-single.php) ?>

#3 Файл из подпапок

Если подгружаемые части находятся в папках то в первый параметр нужно указать относительный путь до файла:

get_template_part( 'inc/nav' );
// подключит файл inc/nav.php

А если нужно подключить файл inc/nav-single.php, то:

get_template_part( 'inc/nav', 'single' );

// или:

get_template_part( 'inc/nav-single' );

В первом случае, сначала будет проверяться файл inc/nav-single.php и если его не существует то inc/nav.php. Во втором только inc/nav-single.php.

#4 Пример с передачей параметров

get_template_part( 'nav', 'single', [ 'param1' => 'hello', 'param2' => [ 1, 2 ] ] );

Теперь в файле inc/nav-single.php указанные параметры можно получить через переменную $args.

Список изменений

С версии 3.0.0 Введена.
С версии 5.5.0 A return value was added.
С версии 5.5.0 The $args parameter was added.

Код get_template_part() WP 5.5.1

wp-includes/general-template.php
<?php
function get_template_part( $slug, $name = null, $args = array() ) {
	/**
	 * Fires before the specified template part file is loaded.
	 *
	 * The dynamic portion of the hook name, `$slug`, refers to the slug name
	 * for the generic template part.
	 *
	 * @since 3.0.0
	 * @since 5.5.0 The `$args` parameter was added.
	 *
	 * @param string      $slug The slug name for the generic template.
	 * @param string|null $name The name of the specialized template.
	 * @param array       $args Additional arguments passed to the template.
	 */
	do_action( "get_template_part_{$slug}", $slug, $name, $args );

	$templates = array();
	$name      = (string) $name;
	if ( '' !== $name ) {
		$templates[] = "{$slug}-{$name}.php";
	}

	$templates[] = "{$slug}.php";

	/**
	 * Fires before a template part is loaded.
	 *
	 * @since 5.2.0
	 * @since 5.5.0 The `$args` parameter was added.
	 *
	 * @param string   $slug      The slug name for the generic template.
	 * @param string   $name      The name of the specialized template.
	 * @param string[] $templates Array of template files to search for, in order.
	 * @param array    $args      Additional arguments passed to the template.
	 */
	do_action( 'get_template_part', $slug, $name, $templates, $args );

	if ( ! locate_template( $templates, true, false, $args ) ) {
		return false;
	}
}

Cвязанные функции

Из раздела: Подключение файлов темы

Еще из тегов шаблона: Основные

14 комментов
Полезные 3 Все