it-swarm.xyz

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

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

38
Michael Crenshaw

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

get_bloginfo('template_directory');

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

bloginfo('template_directory');

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

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
45
EAMann

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

 The return values of get_bloginfo() with and without a Child Theme in WordPress 
(источник: mikeschinkel.com )

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

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

32
MikeSchinkel

Вся структура темы строится на основе двух параметров - 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() для ссылки на только или на родителя theme
  • используйте get_stylesheet_directory_uri() to only or child theme
12
Rarst