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

Приклади

0

#1 Перевіримо наявність файлу перед підключенням

Створимо можливість виводити контент сторінки якось особливо у разі потреби. Для цього потрібно буде в темі створити файл 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

#2 Отримання шляху файлу

echo locate_template('header.php');

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

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

У цю функцію можна вказати не лише назву файлу, а й відносний шлях від кореня теми:

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

Підключить файл filename.php , який знаходиться в папці inc у каталозі дочірньої теми або просто теми, якщо немає дочірньої.

список змін

З версії 2.7.0Введено.
З версії 5.5.0The $args parameter був added.

Код locate_template() WP 6.0.2

function locate_template( $template_names, $load = false, $require_once = true, $args = array() ) {
	$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, $args);
	}

	return $located;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *