WordPress как на ладони

get_theme_file_uri()WP 4.7.0

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

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

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

Функция отличается от похожих на нее функций: get_stylesheet_directory_uri() и get_template_directory_uri(), тем что она на основе этих функций ищет указанный файл: сначала в дочерней теме, если его там нет, то ищет его в родительской. А с помощью этих двух функций можно просто получить URL либо дочерней (если она есть или родительской если её нет), либо напрямую родительской темы.

Используйте 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') )
);

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

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

Код get_theme_file_uri() WP 6.5.2

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 комментария
    Войти