Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

get_theme_file_uri()WP 4.7.0

Получает URL указанного файла темы. Учитывает дочерние темы.

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

Функция работает на основе двух функций:

  • get_stylesheet_directory_uri() — с помощью которой проверяется существует ли файл в дочерней теме.
  • get_template_directory_uri() — если файла в дочерней теме нет, то вернет УРЛ get_template_directory_uri() . '/' . $file.

Не проверяет существование файла в родительской теме! Так если файла нет в дочерней теме и нет в родительской, то она все равно вернет УРЛ на файл родительской/текущей темы!

Эта функция отлично подходит для публичных тем, чтобы корректно работали дочерние. Если делаешь тему только для себя, то можно использовать просто
get_template_directory_uri() в качестве микро-оптимизации.

Используйте get_parent_theme_file_uri(), когда НЕ нужно учитывать дочернюю тему.

Используйте get_theme_file_path(), когда нужно аналогичным способом получить путь файла (не URL).

1 раз — 0.003745 сек (очень медленно) | 50000 раз — 6.93 сек (быстро) | PHP 7.1.5, WP 4.9.4
Хуки из функции

Возвращает

Строку. URL файла.

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

get_theme_file_uri( $file );
$file(строка)

Название файла который нужно найти в теме. Например file.js. Можно указать вложенный файл js/file.php или так /js/file.js.

Если оставить строку пустой, то вернет URL активной темы, учитывая дочернюю тему. См. get_stylesheet_directory_uri()

По умолчанию: ''

Примеры

0

#1 Получим URL файла темы с учетом дочерней темы

Допустим нам нужно подключить в теме файл js/my-script.js, но при этом нужно сделать так, чтобы при создании дочерней темы и такого же файла в ней, подключался файл дочерней темы.

Теперь в WP 4.7 это можно записать очень просто с помощью функции get_theme_file_uri():

wp_enqueue_script(
	'my-script',
	get_theme_file_uri( 'js/my-script.js' ),
	array(),
	filemtime( get_theme_file_path('js/my-script.js') )
);
0

#2 Неработает если указать полный путь

$path = '/home/example.com/wp-content/themes/mytheme/styles.css';
echo get_theme_file_uri( $path );
// https://example.com/wp-content/themes/mytheme/home/example.com/wp-content/themes/mytheme/styles.css

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

С версии 4.7.0 Введена.

Код get_theme_file_uri() WP 7.0

function get_theme_file_uri( $file = '' ) {
	$file = ltrim( $file, '/' );

	$stylesheet_directory = get_stylesheet_directory();

	if ( empty( $file ) ) {
		$url = get_stylesheet_directory_uri();
	} elseif ( get_template_directory() !== $stylesheet_directory && file_exists( $stylesheet_directory . '/' . $file ) ) {
		$url = get_stylesheet_directory_uri() . '/' . $file;
	} else {
		$url = get_template_directory_uri() . '/' . $file;
	}

	/**
	 * Filters the URL to a file in the theme.
	 *
	 * @since 4.7.0
	 *
	 * @param string $url  The file URL.
	 * @param string $file The requested file to search for.
	 */
	return apply_filters( 'theme_file_uri', $url, $file );
}
3 комментария