locate_template()
Находит наиболее подходящий серверный путь к указанному файлу шаблона. При поиске учитывается дочерняя тема. Можно указать, чтобы файл сразу подключался в 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
Данный код выполнит поиск файлов в следующем порядке. При первом обнаружении любого файла, поиск остановиться:
- foot.php в дочерней теме
- foot.php в родительской теме
- header.php в дочерней теме
- header.php в родительской теме
- baz.php в дочерней теме
- baz.php в родительской теме
Если во втором параметре вместо false указать true. То файл будет подключен PHP функций require_once().
Использует WordPress константы (пути): STYLESHEETPATH затем TEMPLATEPATH. Это значит что дочерняя тема имеет приоритет над родительской и может переписывать её файлы.
При подключении файлов, когда второй параметр равен true, используется функция load_template().
Хуков нет.
Возвращает
Строку
.
- Путь до файла, если он был найден.
- Пустую строку, если не удалось найти файл.
Использование
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 Получение пути файла
echo locate_template('header.php'); //> /home/example.com/public_html/wp-content/themes/pink/header.php
#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(); }
#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. |