Мне нужно получить URL моей директории темы, чтобы ссылаться на изображение в директории image/headers темы. Как это делается в PHP?
Эта функция возвращает URL каталога темы, чтобы вы могли использовать его в других функциях:
get_bloginfo('template_directory');
В качестве альтернативы, эта функция будет echo URL каталога темы для браузера:
bloginfo('template_directory');
Итак, пример для изображения в папке themes images/headers
:
<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
Что @EAMann сказал, с оговоркой. Эрик прав в отношении общего подхода и того, как работают функции bloginfo()
и get_bloginfo()
, а также о том, как передать параметр 'template_directory'
, чтобы получить значение, необходимое для (большинства) тем.
Однако есть предостережение, и caveat относится к более новым дочерним темам. Если вы используете дочернюю тему, то 'template_directory'
, вероятно, не то, что вам нужно, если вы на самом деле не пытаетесь обратиться к изображению, которое находится в каталоге родительской темы. Вместо дочерних тем вы, вероятно, захотите передать stylesheet_directory
(я знаю, я знаю, что имена не говорят вам, что они есть, но, эй, так оно и есть!) Заимствование чего-то из ответа Эрика с использованием stylesheet_directory
будет выглядеть это (я сократил пример, чтобы он не переносился):
<img src="<?php bloginfo('stylesheet_directory'); ?>/images/header.jpg" />
Чтобы проиллюстрировать это, я написал быстрый автономный файл, который вы можете поместить в корень вашего сайта как test.php
и запустить, чтобы посмотреть, что он выводит. Сначала запустите с обычной темой, такой как TwentyTen, затем запустите с дочерней темой:
<?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>';
Если вы заметили что-то, вы можете заметить, что есть еще кое-что, что вы можете передать 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:
Вся структура темы строится на основе двух параметров - template
(содержит папку родительской темы namre) и stylesheet
(содержит папку дочерней темы namr). Если не используется дочерняя тема, это то же самое.
Чтобы иметь гибкость фильтров, а не возможность прямого доступа, существуют соответственно get_template()
и get_stylesheet()
.
Теперь единственное, чего не хватает, это объединить их с расположением папки тем. Это можно сделать с помощью get_theme_root_uri()
и снова удобно заключить в get_template_directory_uri()
и get_stylesheet_directory_uri()
.
[get_]bloginfo()
с аргументами template_directory
или stylesheet_directory
просто оборачивает их, и нет особых причин использовать его таким образом. Я бы сказал, что сбивает с толку только наличие аргумента, говорящего каталог (обычно относится к локальным путям), но возвращающего URL.
Sumary:
get_template_directory_uri()
для ссылки на только или на родителя themeget_stylesheet_directory_uri()
to only or child theme