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
Хуки из функции

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

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

Примеры

#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.

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

С версии 3.0.0 Введена.

Код get template part: wp-includes/general-template.php WP 5.3

<?php
function get_template_part( $slug, $name = null ) {
	/**
	 * 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
	 *
	 * @param string      $slug The slug name for the generic template.
	 * @param string|null $name The name of the specialized template.
	 */
	do_action( "get_template_part_{$slug}", $slug, $name );

	$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
	 *
	 * @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.
	 */
	do_action( 'get_template_part', $slug, $name, $templates );

	locate_template( $templates, true, false );
}

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

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

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

18 комментов
Полезные 3 Вопросы 1 Все
  • @ Алексей

    Здравствуйте! подскажите пожалуйста как сделать вывод постов на главной через файл loop а на всех последующих page 2,3,4.... вывод через loop2? Цель вывести на главной посты в 3 колонки а на всех page и категориях в 1 колонку Подскажите пожалуйста!

    Ответить14.Май.2015 в 20:50 #
    • Kama7641
      if( ! is_paged() ){
      	// loop
      }
      else{
      	// loop2
      }
      2
      Ответить14.Май.2015 в 22:10 #
      • @ Алексей

        Спасибо огромное! А не подскажите как ещё сделать чтобы на главной выводилось два поста а на page 2,3,4 по три поста?

        Ответить15.Май.2015 в 05:55 #
  • Виталий realt.abrikos.us

    Тимур, здравствуйте!
    Сразу хочу выразить свое почтение, Ваш сайт очень помогает мне вот уже который год.
    Ну а теперь вопрос по существу: смотрите, у Вас в примере указано:

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

    А если, например, так:

    // получит файл inc/nav-single.php

    То нужно подключать файл таким образом:

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

    Я правильно понимаю?

    Ответить15.Дек.2016 в 15:08 #
    • Виталий realt.abrikos.us

      Уже сам разобрался. Мое предположение было правильным, если:

      // файл inc/nav-single.php
      

      то:

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

      Я копнул чуть глубже, и выяснил что если вдруг файл:

      // файл inc/nav-single-new.php

      То:

      get_template_part('inc/nav', 'single-new');
      2
      Ответить15.Дек.2016 в 15:17 #
      • campusboy3434 www.youtube.com/c/wpplus

        Ну или просто:

        get_template_part('inc/nav-single');
        get_template_part('inc/nav-single-new');
        5
        Ответить15.Дек.2016 в 16:53 #
  • @ Владимир repetitor.msk.ru

    Доброго времени!
    Во время работы над проектом появился вопрос как с помощью get_template_part() передать значение переменной в подключаемый файл. Можете подсказать решение?

    1
    Ответить08.Фев.2017 в 00:37 #
  • Евгений

    Приветствую!
    Пытаюсь подключить шаблон из шорткода, и получается, что контент шаблона встаёт не в месте вызова шорткода, а просто в самом начале контента, из которого вызывается шорткод. Что можно сделать, чтобы подключаемый через шорткод контент шаблона вставал туда, где вызван шорткод?

    Ответить02.Авг.2017 в 15:00 #
    • campusboy3434 www.youtube.com/c/wpplus

      Привет. Используй буфер PHP:

      ob_start(); 
      get_template_part( 'бла-бла-бла' );
      $html = ob_get_clean(); // сюда попадёт всё, что пыталось вывестись на экран, то есть содержимое шаблона

      С переменной $html уже делаешь, что хочешь.

      2
      Ответить02.Авг.2017 в 15:05 #
  • @ Алексей

    в теме самописного шаблона прописана PHP функция

    include 'index-pc.php';
    

    стоит ли заменять на

    get_template_part('index', 'pc');

    Как вобщем сказывается это на сайте? на загрузке? будут ли лишние запросы в базу данных?

    Ответить07.Авг.2017 в 22:00 #
    • Kama7641

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

      2
      Ответить14.Авг.2017 в 13:37 #
  • А какой код должен быть если подключать файл находящийся в подпапке папки. Например, lib/inc/rating-box.php?

    Ответить15.Окт.2017 в 11:16 #
  • @ Александр

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

    А разве не наоборот? Сначала inc/nav-single.php и если его не существует то inc/nav.php ?

    1
    Ответить25.Июл.2018 в 20:51 #
Здравствуйте, !     Войти . Зарегистрироваться