Как мне получить URL-адрес темы в PHP?
4 ответ
- голосов
-
- 2010-08-21
Эта функция возвращает URL-адрес каталога темы,чтобы вы могли использовать его в других функциях:
get_bloginfo('template_directory');
В качестве альтернативы эта функция будет отображать URL-адрес каталога темы в браузере:
bloginfo('template_directory');
Пример изображения в папке
images/headers
темы:<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
This function will return the theme directory URL so you can use it in other functions:
get_bloginfo('template_directory');
Alternatively, this function will echo the theme directory URL to the browser:
bloginfo('template_directory');
So an example for an image in the themes
images/headers
folder would be:<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
-
ПРИМЕЧАНИЕ: это даст вам путь к * родительской * теме,если вы в настоящее время используете дочернюю тему,а не активную дочернюю тему.Более подробный ответ ниже объясняет это более подробно.NOTE: this will give you the path to the *parent* theme if you are currently using a child theme, and not the active child theme. A longer answer below explains this in more detail.
- 0
- 2016-10-19
- Jason
-
Вы можете просто использовать `get_template_directory_uri ()`You can simply use `get_template_directory_uri()`
- 2
- 2018-06-20
- Pei
-
- 2010-08-21
Что сказал @EAMann ,с оговоркой. Эрик прав насчет общего подхода и того,как работают функции
bloginfo ()
иget_bloginfo ()
,и о том,как передать параметр'template_directory'
чтобы получить ценность,необходимую для (большинства) тем.Однако есть одна оговорка,и эта предостережение касается новых дочерних тем . Если вы используете дочернюю тему,то
<цитата>'template_directory'
,вероятно,не то,что вам нужно,если вы на самом деле не пытаетесь ссылаться на изображение,которое находится в каталоге родительской темы. Вместо этого для дочерних тем вы,вероятно,захотите передатьstylesheet_directory
(я знаю,я знаю,что имена не говорят вам,что они собой представляют,но эй,это просто так!) Ответ Эрика с использованиемstylesheet_directory
будет выглядеть следующим образом (я сократил пример,чтобы он не переносился):& lt;img src="& lt;?phpbloginfo ('stylesheet_directory');? >/images/header.jpg"/>
Чтобы проиллюстрировать мысль,я написал быстрый автономный файл,который вы можете поместить в корень своего веб-сайта как
test.php
и запустить,чтобы увидеть,что он выводит. Сначала запустите обычную тему,например TwentyTen,затем запустите с дочерней темой:& lt;?php /* *test.php - проверьте разницу между обычными и дочерними темами * */ включить "wp-load.php"; $bloginfo_params=массив ( 'admin_email', 'atom_url', 'кодировка', 'comments_atom_url', 'comments_rss2_url', 'описание', 'Главная', 'html_type', 'язык', 'имя', 'pingback_url', 'rdf_url', 'rss2_url', 'rss_url', 'адрес сайта', 'каталог_стилей', 'stylesheet_url', 'template_directory', 'template_url', 'text_direction', 'url', 'версия', 'wpurl', ); echo '& lt;tableborder="1" >'; foreach ($bloginfo_params как $param) { $info=get_bloginfo ($param); echo "& lt;tr > & lt;th > {$param}: & lt;/th > & lt;td > {$info} & lt;/td > & lt;/tr >"; } эхо '& lt;/table >';
Если вы заметили что-то,вы могли заметить,что есть гораздо больше того,что вы можете передать в
bloginfo ()
иget_bloginfo ()
; Изучите код и снимок экрана ниже,чтобы найти идеи.Глядя на снимок экрана,вы можете увидеть,что
stylesheet_directory
возвращает то же самое,что и'template_directory'
для обычной темы,но другое значение и,вероятно,значение,которое вам нужно для дочерняя тема.
(источник: mikeschinkel.com )Для наглядности на этом снимке экрана
wp30.dev
- это домен,который работает только на моем локальном компьютере. В настоящее время экземпляр WordPress 3.0.1 и его настроен на127.0.0.1
(так же,какlocalhost
) на моем ноутбуке,и я использую его для тестирования специальных примеров,подобных этому. Я использовал VirtualHostX как удобство в Mac OS X,чтобы помочь мне настроить эти частные немаршрутизируемые.dev
,но любой может сделать это вручную, редактирование файла hosts на компьютере и ? файл httpd.conf.Кстати,если вы не знакомы с дочерними темами ,где еще два ответа WordPress,которые могут помочь:
What @EAMann said, with a caveat. Eric is right about the general approach and how the functions
bloginfo()
andget_bloginfo()
work and about how to pass the parameter'template_directory'
to get the value you need for (most) themes.However there is a caveat and that caveat is with the newer Child Themes. If you are using a child theme then
'template_directory'
is probably not what you want unless you are actually trying to refer to an image that is in the parent theme directory. Instead for child themes what you probably want is to passstylesheet_directory
(I know, I know, the names don't tell you what they are but hey, that's just the way it is!) Borrowing somewhat from Eric's reply usingstylesheet_directory
would look like this (I shortened the example so it would not wrap):<img src="<?php bloginfo('stylesheet_directory'); ?>/images/header.jpg" />
To illustrate the point I wrote a quick standalone file you can drop in your website's root as
test.php
and run to see what it outputs. First run with a regular theme like TwentyTen then run with a child theme:<?php /* * test.php - Test the difference between Regular and Child Themes * */ include "wp-load.php"; $bloginfo_params = array( 'admin_email', 'atom_url', 'charset', 'comments_atom_url', 'comments_rss2_url', 'description', 'home', 'html_type', 'language', 'name', 'pingback_url', 'rdf_url', 'rss2_url', 'rss_url', 'siteurl', 'stylesheet_directory', 'stylesheet_url', 'template_directory', 'template_url', 'text_direction', 'url', 'version', 'wpurl', ); echo '<table border="1">'; foreach($bloginfo_params as $param) { $info = get_bloginfo($param); echo "<tr><th>{$param}:</th><td>{$info}</td></tr>"; } echo '</table>';
If you notice things you might notice that there's a lot more to what you can pass to
bloginfo()
andget_bloginfo()
; study the code and the screenshot below for ideas.Looking at the screenshot you can see that
stylesheet_directory
returns the same thing as'template_directory'
for a regular theme but a different value, and probably the value you need for a child theme.
(source: mikeschinkel.com)For clarity on this screenshot,
wp30.dev
is a domain that runs only on my local computer. It is currently an instance of WordPress 3.0.1 and it is configured at127.0.0.1
(same aslocalhost
) on my laptop and I use it for testing ad-hoc examples like this. I used VirtualHostX as a convenience on the Mac OS X to help me set up those private non-routable.dev
domains but anyone can do it manually by editing the computer's hosts file and the ? httpd.conf file.By the way, in case you are not familiar with Child Themes where are two other WordPress Answers that might help:
-
Вау,отличный ответ.Мне было лень с темой,над которой я работаю сейчас,и не создавал дочернюю тему,но это будет очень полезно в будущем.Поздравляю и с этим сценарием.Хорошо закодированный.Благодаря!Wow, great answer. I was lazy with the theme I'm working on now and didn't set up a child theme, but this will be very helpful in the future. Congratulations on that script too. Well-coded. Thanks!
- 0
- 2010-08-21
- Michael Crenshaw
-
Привет,хороший ответ!Обычно я используюget_stylesheet_directory_uri ().Должен ли я использовать простой ol 'get_stylesheet_directory () `?Hi, nice answer! I usually use `get_stylesheet_directory_uri()`. Should I be using plain ol' `get_stylesheet_directory()`?
- 0
- 2012-01-18
- djb
-
- 2012-03-26
Вся структура темы строится на основе двух параметров -
template
(содержитnamre родительской папки темы) иstylesheet
(содержитnamr дочерней папки темы). Если дочерняя тема не используется,это то же самое.Чтобы иметь гибкость фильтров,а не возможность прямого доступа,соответственно есть
get_template ()
иget_stylesheet ()
.Теперь не хватает только их совмещения с расположением папки тем. Это можно сделать с помощью
get_theme_root_uri ()
и снова удобно обернуть вget_template_directory_uri ()
и < code>get_stylesheet_directory_uri () .[get_]bloginfo ()
сtemplate_directory
или Аргументыstylesheet_directory
просто обертывают их,и нет особых причин использовать их таким образом. Я бы сказал,что это сбивает с толку только то,что аргумент указывает каталог (обычно относится к локальным путям),но возвращает URL-адреса.Резюме:
- используйте
get_template_directory_uri ()
для ссылки на единственную или родительскую тему - используйте
get_stylesheet_directory_uri ()
для единственной или дочерней темы
The whole structure of theme builds on top of two options -
template
(holding parent theme folder namre) andstylesheet
(holding child theme folder namr). If there is no child theme used these are the same.To have flexibility of filters, rather than access option directly, there are accordingly
get_template()
andget_stylesheet()
.Now the only thing is missing is to combine those with themes folder location. This can be done with
get_theme_root_uri()
and again conveniently wrapped inget_template_directory_uri()
andget_stylesheet_directory_uri()
.[get_]bloginfo()
withtemplate_directory
orstylesheet_directory
arguments merely wraps these and there is little reason to use it like that. I'd say it is only confusing by having argument saying directory (commonly relates to local paths), but returning URLs.Sumary:
- use
get_template_directory_uri()
to refer to only or parent theme - use
get_stylesheet_directory_uri()
to only or child theme
-
-
Нет объяснения,почему это лучше,чем другие решения?No explanation why this is better than the other solutions?
- 1
- 2012-11-05
- fuxia
-
Мне нужно получить URL-адрес каталога моей темы для ссылки на изображение в каталоге изображений/заголовков темы.Как это делается в PHP?