Як отримати URL-адресу теми в PHP?


38

Мені потрібно отримати URL-адресу мого каталогу тем, щоб вказати зображення в каталозі зображень / заголовків теми. Як це робиться в PHP?

Відповіді:


47

Ця функція поверне URL-адресу каталогу теми, щоб ви могли використовувати її в інших функціях:

get_bloginfo('template_directory');

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

bloginfo('template_directory');

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

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

ПРИМІТКА: це дасть вам шлях до батьківської теми, якщо ви зараз використовуєте дочірню тему, а не активну дочірню тему. Більш детальна відповідь нижче пояснює це детальніше.
Джейсон

2
Ви можете просто скористатисяget_template_directory_uri()
Pei

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домени, але кожен може зробити це вручну, відредагувавши хост-файл комп'ютера та? Файл httpd.conf.

До речі, якщо ви не знайомі з темами дитини, де є ще два відповіді WordPress, які можуть допомогти:


Вау, чудова відповідь. Я був ледачий з тією темою, над якою зараз працюю, і не створив дочірню тему, але це буде дуже корисно в майбутньому. Вітаємо і з цим сценарієм. Добре закодований. Спасибі!
Майкл Креншо

Привіт, приємна відповідь! Я зазвичай використовую get_stylesheet_directory_uri(). Чи повинен я використовувати звичайний ol ' get_stylesheet_directory()?
djb

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-адреси.

Резюме:

  • використовувати get_template_directory_uri()для позначення лише або батьківської теми
  • використовувати get_stylesheet_directory_uri()для тільки або дитячої теми

-1

Я цим користуюся (dirname(get_bloginfo('stylesheet_url')))


1
Немає пояснень, чому це краще, ніж інші рішення?
фуксія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.