Cum pot obține URL-ul temei în PHP?
Am nevoie să obțin URL-ul directorului temei pentru a referenția o imagine din directorul image/headers al temei. Cum se face acest lucru în PHP?

Această funcție va returna URL-ul directorului temei, astfel încât să-l puteți utiliza în alte funcții:
get_bloginfo('template_directory');
Alternativ, această funcție va afișa URL-ul directorului temei în browser:
bloginfo('template_directory');
De exemplu, pentru o imagine în folderul images/headers
al temei, codul ar fi:
<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" alt="Descrierea imaginii" title="Titlul imaginii" />

Ceea ce a spus @EAMann, cu o precizare. Eric are dreptate în ceea ce privește abordarea generală și modul în care funcțiile bloginfo()
și get_bloginfo()
funcționează, precum și despre cum să transmiți parametrul 'template_directory'
pentru a obține valoarea de care ai nevoie pentru majoritatea temelor.
Cu toate acestea, există o precizare, iar această precizare se referă la noile Teme Copil. Dacă folosești o temă copil, atunci 'template_directory'
probabil nu este ceea ce cauți, decât dacă încerci să te referi la o imagine care se află în directorul temei părinte. În schimb, pentru temele copil, probabil că vei dori să transmiți stylesheet_directory
(știu, știu, numele nu sunt foarte intuitive, dar așa stau lucrurile!). Folosind stylesheet_directory
, codul ar arăta astfel (am scurtat exemplul pentru a nu depăși lățimea):
<img src="<?php bloginfo('stylesheet_directory'); ?>/images/header.jpg" />
Pentru a ilustra acest lucru, am scris un fișier rapid pe care îl poți descărca în directorul rădăcină al site-ului tău sub numele test.php
și să-l rulezi pentru a vedea ce afișează. Rulează-l mai întâi cu o temă obișnuită, cum ar fi TwentyTen, apoi cu o temă copil:
<?php
/*
* test.php - Testează diferența dintre Temele Obinuite și Temele Copil
*
*/
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>';
Dacă observi cu atenție, vei vedea că există mult mai multe opțiuni pe care le poți transmite funcțiilor bloginfo()
și get_bloginfo()
; studiază codul și captura de ecran de mai jos pentru idei.
Privind captura de ecran, poți observa că stylesheet_directory
returnează același lucru ca 'template_directory'
pentru o temă obișnuită, dar o valoare diferită (și probabil valoarea de care ai nevoie) pentru o temă copil.
(sursa: mikeschinkel.com)
Pentru claritate, în această captură de ecran,
wp30.dev
este un domeniu care rulează doar pe computerul meu local. Este în prezent o instanță WordPress 3.0.1 și este configurat la127.0.0.1
(același lucru calocalhost
) pe laptopul meu și îl folosesc pentru teste ad-hoc ca acesta. Am folosit VirtualHostX pentru ușurință pe Mac OS X pentru a-mi configura aceste domenii private.dev
, dar oricine poate face acest lucru manual prin editarea fișierului hosts al computerului și a fișierului httpd.conf.
Apropo, dacă nu ești familiarizat cu Temele Copil, iată alte două răspunsuri de pe WordPress Answers care te-ar putea ajuta:

Wow, răspuns excelent. Am fost leneș cu tema la care lucrez acum și nu am configurat o temă copil, dar acest lucru va fi foarte util în viitor. Felicitări și pentru acel script. Bine codat. Mulțumesc!

Întreaga structură a temei este construită pe baza a două opțiuni - template
(care deține numele folderului temei părinte) și stylesheet
(care deține numele folderului temei copil). Dacă nu este utilizată nicio temă copil, acestea sunt identice.
Pentru a avea flexibilitatea filtrelor, în loc să accesăm direct opțiunile, există în consecință get_template()
și get_stylesheet()
.
Acum, singurul lucru care lipsește este să combinăm acestea cu locația folderului temelor. Acest lucru poate fi făcut cu get_theme_root_uri()
și din nou, în mod convenabil, este învelit în get_template_directory_uri()
și get_stylesheet_directory_uri()
.
[get_]bloginfo()
cu argumentele template_directory
sau stylesheet_directory
doar înfășoară aceste funcții și există puține motive să-l folosiți în acest fel. Aș spune că este doar derutant prin faptul că argumentul spune director (care se referă în mod obișnuit la căi locale), dar returnează URL-uri.
Rezumat:
- folosiți
get_template_directory_uri()
pentru a vă referi la tema doar sau părinte - folosiți
get_stylesheet_directory_uri()
pentru tema doar sau copil
