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

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

  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().

Хуков нет.

Возвращает

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

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

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

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

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

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

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

Примеры

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

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

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

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

Код из


wp-includes/template.php

WP 4.7.2

<?php
function locate_template($template_names, $load = false, $require_once = true ) {
	$located = '';
	foreach ( (array) $template_names as $template_name ) {
		if ( !$template_name )
			continue;
		if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
			$located = STYLESHEETPATH . '/' . $template_name;
			break;
		} elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
			$located = TEMPLATEPATH . '/' . $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, $require_once );

	return $located;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *