Come ottenere l'URL del tema in PHP? Guida pratica
Ho bisogno di ottenere l'URL della directory del mio tema per fare riferimento a un'immagine nella directory image/headers del tema. Come si fa questo in PHP?

Questa funzione restituirà l'URL della directory del tema in modo che tu possa utilizzarla in altre funzioni:
get_bloginfo('template_directory');
In alternativa, questa funzione visualizzerà l'URL della directory del tema direttamente nel browser:
bloginfo('template_directory');
Quindi un esempio per un'immagine nella cartella images/headers
del tema sarebbe:
<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" alt="Immagine di intestazione" title="Immagine di intestazione" />

NOTA: questo ti darà il percorso del tema genitore se stai attualmente utilizzando un tema figlio, e non il tema figlio attivo. Una risposta più dettagliata qui sotto spiega questo in modo più approfondito.

Quello che ha detto @EAMann, con una precisazione. Eric ha ragione sull'approccio generale e su come funzionano le funzioni bloginfo()
e get_bloginfo()
, e su come passare il parametro 'template_directory'
per ottenere il valore di cui hai bisogno per (la maggior parte dei) temi.
Tuttavia c'è una precisazione e questa precisazione riguarda i più recenti Child Theme. Se stai utilizzando un child theme, allora 'template_directory'
probabilmente non è quello che vuoi, a meno che tu non stia cercando di riferirti a un'immagine che si trova nella directory del tema genitore. Invece, per i child theme, probabilmente vuoi passare stylesheet_directory
(lo so, lo so, i nomi non ti dicono cosa sono, ma hey, è così che funziona!) Prendendo in prestito parte della risposta di Eric, utilizzare stylesheet_directory
sarebbe così (ho abbreviato l'esempio per evitare che si estendesse):
<img src="<?php bloginfo('stylesheet_directory'); ?>/images/header.jpg" />
Per illustrare il punto, ho scritto un file standalone rapido che puoi inserire nella root del tuo sito come test.php
e eseguire per vedere cosa restituisce. Prima eseguilo con un tema regolare come TwentyTen, poi con un child theme:
<?php
/*
* test.php - Testare la differenza tra Temi Regolari e Child Theme
*
*/
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>';
Se osservi bene, potresti notare che c'è molto di più in quello che puoi passare a bloginfo()
e get_bloginfo()
; studia il codice e lo screenshot qui sotto per avere idee.
Guardando lo screenshot puoi vedere che stylesheet_directory
restituisce la stessa cosa di 'template_directory'
per un tema regolare, ma un valore diverso, e probabilmente il valore di cui hai bisogno per un child theme.
(fonte: mikeschinkel.com)
Per chiarezza su questo screenshot,
wp30.dev
è un dominio che funziona solo sul mio computer locale. Attualmente è un'istanza di WordPress 3.0.1 ed è configurata su127.0.0.1
(lo stesso dilocalhost
) sul mio laptop e lo uso per testare esempi ad-hoc come questo. Ho usato VirtualHostX come comodità su Mac OS X per aiutarmi a configurare quei domini privati non instradabili.dev
, ma chiunque può farlo manualmente modificando il file hosts del computer e il file httpd.conf.
A proposito, nel caso tu non abbia familiarità con i Child Theme, ecco altre due risposte di WordPress Answers che potrebbero aiutarti:

Wow, ottima risposta. Sono stato pigro con il tema su cui sto lavorando ora e non ho configurato un child theme, ma questo sarà molto utile in futuro. Complimenti anche per quello script. Ben codificato. Grazie!

L'intera struttura del tema si basa su due opzioni - template
(che contiene il nome della cartella del tema genitore) e stylesheet
(che contiene il nome della cartella del tema figlio). Se non viene utilizzato un tema figlio, questi valori sono identici.
Per garantire la flessibilità dei filtri, invece di accedere direttamente alle opzioni, ci sono rispettivamente get_template()
e get_stylesheet()
.
L'unica cosa che manca è combinare queste informazioni con la posizione della cartella dei temi. Questo può essere fatto con get_theme_root_uri()
e, ancora una volta, convenientemente racchiuso in get_template_directory_uri()
e get_stylesheet_directory_uri()
.
[get_]bloginfo()
con gli argomenti template_directory
o stylesheet_directory
semplicemente avvolge queste funzioni e c'è poco motivo per usarlo in questo modo. Direi che è solo fonte di confusione avere un argomento che dice "directory" (comunemente relativo ai percorsi locali), ma che restituisce URL.
Riassunto:
- usa
get_template_directory_uri()
per riferirti al tema solo o genitore - usa
get_stylesheet_directory_uri()
per il tema solo o figlio
