Jak uzyskać adres URL motywu w PHP?

38

Potrzebuję uzyskać adres URL mojego katalogu motywu, aby odwoływał się do obrazu w katalogu image / headers motywu. Jak to się robi w PHP?

Michael Crenshaw
źródło

Odpowiedzi:

47

Ta funkcja zwróci adres URL katalogu motywów, dzięki czemu będzie można go używać w innych funkcjach:

get_bloginfo('template_directory');

Alternatywnie ta funkcja wyśle echo adresu URL katalogu motywów do przeglądarki:

bloginfo('template_directory');

Przykładem obrazu w images/headersfolderze motywów byłoby:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
EAMann
źródło
UWAGA: da to ścieżkę do motywu nadrzędnego, jeśli obecnie używasz motywu podrzędnego, a nie aktywnego motywu podrzędnego. Dłuższa odpowiedź poniżej wyjaśnia to bardziej szczegółowo.
Jason,
2
Możesz po prostu użyćget_template_directory_uri()
Pei
32

Co powiedział @EAMann , z zastrzeżeniem. Eric ma rację co do ogólnego podejścia oraz tego, jak funkcje bloginfo()i get_bloginfo()działanie oraz jak przekazać parametr, 'template_directory'aby uzyskać wartość potrzebną dla (większości) motywów.

Istnieje jednak pewien wyjątek i że zastrzeżenie jest z nowszych tematów Rodziny . Jeśli używasz motywu podrzędnego, 'template_directory'prawdopodobnie nie jest to, czego chcesz, chyba że faktycznie próbujesz odwołać się do obrazu znajdującego się w katalogu motywów nadrzędnych. Zamiast tego w przypadku motywów podrzędnych prawdopodobnie chcesz przekazać stylesheet_directory(wiem, wiem, że imiona nie mówią, jakie są, ale hej, tak po prostu jest!) Pożyczanie nieco z odpowiedzi Erica stylesheet_directorywyglądałoby tak ( Skróciłem przykład, aby się nie zawijał):

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

Aby zilustrować tę kwestię, napisałem szybki samodzielny plik, możesz upuścić w katalogu głównym swojej witryny jako test.phpi uruchomić, aby zobaczyć, co wyprowadza. Najpierw uruchom ze standardowym motywem, takim jak TwentyTen, a następnie uruchom z motywem potomnym:

<?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>';

Jeśli zauważysz rzeczy, możesz zauważyć, że jest o wiele więcej do tego, co możesz przekazać bloginfo()i get_bloginfo(); zapoznaj się z kodem i zrzutem ekranu poniżej, aby znaleźć pomysły.

Patrząc na zrzut ekranu, możesz zobaczyć, że stylesheet_directoryzwraca to samo, co 'template_directory'dla zwykłego motywu, ale inną wartość i prawdopodobnie wartość, której potrzebujesz dla motywu potomnego.

Zwracane wartości get_bloginfo () z motywem potomnym i bez niego w WordPress
(źródło: mikeschinkel.com )

Dla przejrzystości tego zrzutu ekranu wp30.devjest to domena, która działa tylko na moim komputerze lokalnym. Jest to obecnie instancja WordPress 3.0.1 i jest skonfigurowana w 127.0.0.1(tak samo jak localhost) na moim laptopie i używam go do testowania takich przykładów ad-hoc. Użyłem VirtualHostX jako wygody w Mac OS X, aby pomóc mi skonfigurować te prywatne .devdomeny, które nie są routowalne , ale każdy może to zrobić ręcznie, edytując plik hosts komputera i? plik httpd.conf.

Nawiasem mówiąc, w przypadku, gdy nie znasz tematów podrzędnych, gdzie są dwie inne odpowiedzi WordPress, które mogą pomóc:

MikeSchinkel
źródło
Wow, świetna odpowiedź. Byłem leniwy w temacie, nad którym teraz pracuję i nie skonfigurowałem motywu podrzędnego, ale będzie to bardzo pomocne w przyszłości. Gratulujemy również tego skryptu. Dobrze zakodowane. Dzięki!
Michael Crenshaw,
Cześć, ładna odpowiedź! Zwykle używam get_stylesheet_directory_uri(). Czy powinienem używać zwykłego starego get_stylesheet_directory()?
djb
13

Cała struktura motywu opiera się na dwóch opcjach - template(przytrzymanie nazwy folderu motywu nadrzędnego) i stylesheet(przytrzymanie nazwy folderu motywu podrzędnego). Jeśli nie jest używany motyw potomny, są one takie same.

Aby mieć elastyczność filtrów, zamiast bezpośredniego dostępu do opcji, istnieją odpowiednio get_template()i get_stylesheet().

Teraz brakuje tylko połączenia tych z lokalizacją folderu motywów. Można to zrobić za pomocą get_theme_root_uri()i ponownie wygodnie opakowane w get_template_directory_uri()i get_stylesheet_directory_uri().

[get_]bloginfo()z argumentami template_directorylub stylesheet_directorypo prostu je owija i nie ma powodu, aby z tego korzystać Powiedziałbym, że jest to mylące, ponieważ argument mówiący o katalogu (zwykle odnosi się do lokalnych ścieżek), ale zwraca adresy URL.

Sumaryczny:

  • użyj, get_template_directory_uri()aby odwołać się tylko do motywu nadrzędnego lub tylko do niego
  • użyj tylkoget_stylesheet_directory_uri() do lub motywu podrzędnego
Rarst
źródło
-1

używam tego (dirname(get_bloginfo('stylesheet_url')))

fja3omega
źródło
1
Bez wyjaśnienia, dlaczego jest to lepsze niż inne rozwiązania?
fuxia