Функция locate_template()
в WordPress используется для поиска и возврата пути к файлу шаблона. Она обеспечивает удобный способ для тем и плагинов искать и подключать нужные файлы шаблонов, учитывая при этом наличие дочерней темы. Если требуется, файл может быть сразу подключен через PHP.
locate_template( $template_names, $load = false, $require_once = true, $args = array() )
Параметры
$template_names
(array|string): Массив или строка с именами файлов шаблонов для поиска. Файлы должны включать расширение, например,header.php
.$load
(bool): Еслиtrue
, файл будет подключен с помощьюrequire_once()
. По умолчаниюfalse
.$require_once
(bool): Еслиtrue
, файл будет загружен с помощьюrequire_once()
. По умолчаниюtrue
.$args
(array): Дополнительные параметры для подключаемого файла. Используется переменная$args
в подключаемом файле. Доступен с версии WordPress 5.5. По умолчаниюarray()
.
Возвращаемое значение
- (string): Путь к найденному файлу шаблона или пустая строка, если файл не найден.
Пример использования
Допустим, у вас есть плагин, который должен загружать пользовательский шаблон. Вы можете использовать locate_template()
для поиска и загрузки этого шаблона следующим образом:
function genius_plugin_load_template( $template_name ) {
// Имена файлов шаблонов для поиска
$templates = array(
$template_name . '.php',
'my-plugin/' . $template_name . '.php'
);
// Ищем шаблон в текущей или родительской теме
$located = locate_template( $templates, true, false );
// Если шаблон не найден, используем шаблон по умолчанию из плагина
if ( '' === $located ) {
$located = plugin_dir_path( __FILE__ ) . 'templates/' . $template_name . '.php';
require $located;
}
}
// Пример использования функции
add_action( 'template_redirect', function() {
if ( is_singular( 'custom_post_type' ) ) {
genius_plugin_load_template( 'single-custom-post-type' );
exit;
}
} );
Подробное объяснение
- Имена файлов шаблонов: Мы создаем массив
$templates
, содержащий возможные пути к файлам шаблонов. - Поиск шаблона: Функция
locate_template()
ищет файлы в массиве$templates
и возвращает путь к найденному файлу. - Загрузка шаблона: Если найденный путь не пустой, файл загружается с помощью
require
. Если путь пустой, загружается шаблон по умолчанию из папки плагина. - Использование функции: Функция вызывается в хук
template_redirect
, который срабатывает перед загрузкой шаблона. Если условиеis_singular( 'custom_post_type' )
истинно, загружается шаблон для типа записиcustom_post_type
.
Дополнительные примеры
Пример 1: Получение пути файла
echo locate_template('header.php');
// Выведет: /home/example.com/public_html/wp-content/themes/your-theme/header.php
Пример 2: Проверка наличия файла перед подключением
Создадим возможность выводить контент страницы особым образом, если файл шаблона существует. Для этого создадим файл content-<SLUG>
.php в теме, который будет использоваться вместо функции the_content()
:
$page_slug = $post->post_name;
$located_template = locate_template("content-$page_slug.php");
if( $located_template ) {
// Подключаем файл шаблона
require $located_template;
// Или так:
// get_template_part('content', $page_slug);
} else {
// Файл не найден, загружаем контент стандартно
the_content();
}
Пример 3: Указание подпапок
Можно указать не только название файла, но и относительный путь от корня темы:
locate_template('inc/filename.php', true);
Этот код подключит файл filename.php
, который находится в папке inc
в каталоге дочерней темы или основной темы, если дочерняя тема отсутствует.
Пример 4: Поиск и подключение файла шаблона
Рассмотрим пример, где мы ищем файл шаблона и подключаем его:
$files = array(
'foo.php', // не существует
'header.php', // существует, будет возвращен
'bar.php', // проверяться не будет
);
$file_path = locate_template( $files );
echo $file_path;
// выведет: /home/example.com/wp-content/themes/theme_name/header.php
В данном коде функция locate_template()
будет искать файлы в следующем порядке. При первом обнаружении файла поиск прекращается:
foo.php
в дочерней темеfoo.php
в родительской темеheader.php
в дочерней темеheader.php
в родительской темеbar.php
в дочерней темеbar.php
в родительской теме
Если в параметре $load
указать true
, файл будет подключен через require_once()
.
Используемые функции и константы
- load_template(): Используется для загрузки шаблонов, когда второй параметр равен
true
. - Константы STYLESHEETPATH и TEMPLATEPATH: Дочерняя тема имеет приоритет над родительской и может переписывать её файлы.
Заключение
Функция locate_template()
возвращает строку с путем до найденного файла или пустую строку, если файл не найден. Она является основой для таких функций, как get_query_template()
, get_template_part()
, get_sidebar()
, get_header()
, get_footer()
, что делает её важной частью системы шаблонов WordPress.