eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

locate_template()WP 2.7.0

Находит наиболее подходящий серверный путь к указанному файлу шаблона. При поиске учитывается дочерняя тема. Можно указать, чтобы файл сразу подключался в PHP.

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

$files = array(
	'foot.php', // не существует
	'header.php', // существует, будет возвращен
	'baz.php', // проверяться не будет
);
$file_path = locate_template( $files );

echo $file_path;
// выведет: /home/wp-kama.ru/wp-content/themes/wp-kama/header.php

Данный код выполнит поиск файлов в следующем порядке. При первом обнаружении любого файла, поиск остановиться:

  1. foot.php в дочерней теме
  2. foot.php в родительской теме
  3. header.php в дочерней теме
  4. header.php в родительской теме
  5. baz.php в дочерней теме
  6. baz.php в родительской теме

Если во втором параметре вместо false указать true. То файл будет подключен PHP функций require_once().

Использует WordPress константы (пути): STYLESHEETPATH затем TEMPLATEPATH. Это значит что дочерняя тема имеет приоритет над родительской и может переписывать её файлы.

При подключении файлов, когда второй параметр равен true, используется функция load_template().

Работает на основе: load_template()
1 раз — 0.000039 сек (очень быстро) | 50000 раз — 0.16 сек (очень быстро) | PHP 7.1.2, WP 4.7.3

Хуков нет.

Возвращает

Строку.

  • Путь до файла, если он был найден.
  • Пустую строку, если не удалось найти файл.

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

locate_template( $template_names, $load, $require_once, $args );
$template_names(строка/массив) (обязательный)

Массив файлов шаблона, которые нужно подключить. Файлы будут подключаться по указанному в массиве порядку.

Для файлов нужно указывать расширение (пр: header.php).

Вместо массива можно указать название файла в виде строки.

$load(логический)
true означает, что файл должен быть подключен. В противном случае функция ничего не подключит, а просто вернет путь до указанного файла.
По умолчанию: false
$require_once(логический)
Если указать true, то файл шаблона будет загружен с помощью PHP функции require_once. При false будет использована функция require. Нет смысла указывать этот параметр, если $load установлен в false.
По умолчанию: true
$args(массив) (С WP 5.5)
Дополнительные параметры для подключаемого файла. Используйте переменную $args в подключаемом файле.
По умолчанию: array()

Примеры

1

#1 Получение пути файла

echo locate_template('header.php');

//> /home/example.com/public_html/wp-content/themes/pink/header.php
0

#2 Проверим наличие файла перед подключением

Создадим возможность выводить контент страницы как-то по особенному в случае необходимости. Для этого нужно будет в теме создать файл content-СЛАГ_СТРАНИЦЫ.php и его код будет использован вместо функции the_content():

$pageName = $post->post_name;
$locate_template = locate_template("content-$pageName.php");
if( $locate_template ) {
	// ОК, подключаем файл шаблона
	require $locate_template;

	// или так:
	//get_template_part('content', $pageName );
}
else {
	// Файл не найден, загружаем контент стандартно
	the_content();
}
0

#3 Можно указывать подпапки

В эту функцию можно указать не только название файла, но и относительный путь от корня темы:

locate_template('inc/filename.php', true);

Подключит файл filename.php, который находится в папке inc в каталоге дочерней темы или просто темы, если нет дочерней.

Заметки

  • Global. Строка. $wp_stylesheet_path Path to current theme's stylesheet directory.
  • Global. Строка. $wp_template_path Path to current theme's template directory.

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

С версии 2.7.0 Введена.
С версии 5.5.0 The $args parameter was added.

Код locate_template() WP 6.7.1

function locate_template( $template_names, $load = false, $load_once = true, $args = array() ) {
	global $wp_stylesheet_path, $wp_template_path;

	if ( ! isset( $wp_stylesheet_path ) || ! isset( $wp_template_path ) ) {
		wp_set_template_globals();
	}

	$is_child_theme = is_child_theme();

	$located = '';
	foreach ( (array) $template_names as $template_name ) {
		if ( ! $template_name ) {
			continue;
		}
		if ( file_exists( $wp_stylesheet_path . '/' . $template_name ) ) {
			$located = $wp_stylesheet_path . '/' . $template_name;
			break;
		} elseif ( $is_child_theme && file_exists( $wp_template_path . '/' . $template_name ) ) {
			$located = $wp_template_path . '/' . $template_name;
			break;
		} elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
			$located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
			break;
		}
	}

	if ( $load && '' !== $located ) {
		load_template( $located, $load_once, $args );
	}

	return $located;
}
3 комментария
    Войти