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

38

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

Майкл Креншоу
источник

Ответы:

47

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

get_bloginfo('template_directory');

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

bloginfo('template_directory');

Таким образом, пример для изображения в images/headersпапке тем будет:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
EAMann
источник
ПРИМЕЧАНИЕ: это даст вам путь к родительской теме, если вы в настоящее время используете дочернюю тему, а не активную дочернюю тему. Более длинный ответ ниже объясняет это более подробно.
Джейсон
2
Вы можете просто использоватьget_template_directory_uri()
Пей
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 - 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'для обычной темы, но другое значение и, вероятно, значение, которое вам нужно для дочерней темы.

Возвращаемые значения 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, которые могут помочь:

MikeSchinkel
источник
Вау, отличный ответ. Я ленился с темой, над которой я сейчас работаю, и не создал дочернюю тему, но это будет очень полезно в будущем. Поздравляю с этим сценарием тоже. Ну кодировка. Благодарность!
Майкл Креншоу
Привет, хороший ответ! Я обычно использую get_stylesheet_directory_uri(). Должен ли я использовать обычный старый get_stylesheet_directory()?
DJJ
13

Вся структура темы основывается на двух параметрах - 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()для ссылки только на родительскую тему
  • использовать get_stylesheet_directory_uri()для только или детской темы
Rarst
источник
-1

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

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