Как получить URL темы в PHP?

21 авг. 2010 г., 00:46:43
Просмотры: 138K
Голосов: 41

Мне нужно получить URL директории моей темы, чтобы сослаться на изображение в директории image/headers темы. Как это сделать в PHP?

0
Все ответы на вопрос 4
2
50

Эта функция будет возвращать URL директории темы, чтобы вы могли использовать его в других функциях:

get_bloginfo('template_directory');

Альтернативно, эта функция будет выводить URL директории темы в браузер:

bloginfo('template_directory');

Пример для изображения в папке темы images/headers будет выглядеть так:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" alt="Описание изображения" title="Заголовок изображения" />
21 авг. 2010 г. 03:19:11
Комментарии

ПРИМЕЧАНИЕ: это даст вам путь к родительской теме, если вы используете дочернюю тему, а не к активной дочерней теме. Более подробный ответ ниже объясняет это детальнее.

Jason Jason
19 окт. 2016 г. 12:40:45

Вы можете просто использовать get_template_directory_uri()

Pei Pei
20 июн. 2018 г. 05:33:33
2
32

Как сказал @EAMann, но с оговоркой. Эрик прав насчёт общего подхода и работы функций bloginfo() и get_bloginfo(), а также передачи параметра 'template_directory' для получения нужного значения (в большинстве) тем.

Однако есть оговорка, и эта оговорка касается новых Дочерних Тем. Если вы используете дочернюю тему, то 'template_directory', вероятно, не то, что вам нужно, если только вы не хотите обратиться к изображению в директории родительской темы. Вместо этого для дочерних тем скорее всего нужен параметр stylesheet_directory (да, я знаю, названия не очень информативны, но так уж сложилось!). Заимствуя пример Эрика, использование stylesheet_directory выглядит так (я сократил пример, чтобы он не переносился):

<img src="<?php bloginfo('stylesheet_directory'); ?>/images/header.jpg" />

Чтобы проиллюстрировать разницу, я написал небольшой автономный файл, который можно поместить в корень сайта как test.php и запустить для просмотра вывода. Сначала запустите с обычной темой, например TwentyTen, затем с дочерней темой:

<?php
/*
* test.php - Проверка различий между Обычной и Дочерней Темой
*
*/

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' для обычной темы, но другое значение для дочерней темы, которое скорее всего и нужно.

Результаты get_bloginfo() с Дочерней Темой и без неё в WordPress
(источник: mikeschinkel.com)

Для ясности: на этом скриншоте wp30.dev — это домен, работающий только на моём локальном компьютере. В данный момент это экземпляр WordPress 3.0.1, настроенный на 127.0.0.1 (то же, что и localhost) на моём ноутбуке, и я использую его для тестирования таких примеров. Я использовал VirtualHostX для удобства на Mac OS X, чтобы настроить эти частные не маршрутизируемые домены .dev, но любой может сделать это вручную, отредактировав файл hosts и файл httpd.conf.

Кстати, если вы не знакомы с Дочерними Темами, вот ещё два ответа на WordPress Answers, которые могут помочь:

21 авг. 2010 г. 10:50:22
Комментарии

Вау, отличный ответ. Я был ленив с темой, над которой сейчас работаю, и не настроил дочернюю тему, но это будет очень полезно в будущем. Поздравляю и с этим скриптом. Хорошо написан. Спасибо!

crenshaw-dev crenshaw-dev
21 авг. 2010 г. 13:32:55

Привет, отличный ответ! Я обычно использую get_stylesheet_directory_uri(). Стоит ли мне использовать простой get_stylesheet_directory()?

djb djb
18 янв. 2012 г. 10:59:02
0
13

Вся структура темы построена на двух опциях - template (хранит название родительской темы) и stylesheet (хранит название дочерней темы). Если дочерняя тема не используется, эти значения будут одинаковыми.

Для обеспечения гибкости фильтров, вместо прямого доступа к опциям, используются соответствующие функции get_template() и get_stylesheet().

Единственное, чего не хватает - это объединить эти функции с расположением папки тем. Это можно сделать с помощью get_theme_root_uri(), что удобно обернуто в функции get_template_directory_uri() и get_stylesheet_directory_uri().

Функция [get_]bloginfo() с аргументами template_directory или stylesheet_directory просто оборачивает эти функции, и нет особых причин использовать её таким образом. Можно сказать, что это только вносит путаницу, поскольку аргумент говорит о директории (что обычно относится к локальным путям), но возвращает URL-адреса.

Итог:

  • используйте get_template_directory_uri() для ссылки на родительскую или единственную тему
  • используйте get_stylesheet_directory_uri() для ссылки на дочернюю или единственную тему
26 мар. 2012 г. 19:59:56
1
-1

Я использую это (dirname(get_bloginfo('stylesheet_url')))

26 мар. 2012 г. 19:31:05
Комментарии

Нет объяснения, почему это решение лучше других?

fuxia fuxia
5 нояб. 2012 г. 03:52:14