Come ottenere l'URL del tema in PHP? Guida pratica

21 ago 2010, 00:46:43
Visualizzazioni: 138K
Voti: 41

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?

0
Tutte le risposte alla domanda 4
2
50

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" />
21 ago 2010 03:19:11
Commenti

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.

Jason Jason
19 ott 2016 12:40:45

Puoi semplicemente usare get_template_directory_uri()

Pei Pei
20 giu 2018 05:33:33
2
32

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.

I valori restituiti da get_bloginfo() con e senza Child Theme in WordPress
(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 su 127.0.0.1 (lo stesso di localhost) 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:

21 ago 2010 10:50:22
Commenti

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!

crenshaw-dev crenshaw-dev
21 ago 2010 13:32:55

Ciao, bella risposta! Io di solito uso get_stylesheet_directory_uri(). Dovrei usare il semplice get_stylesheet_directory()?

djb djb
18 gen 2012 10:59:02
0
13

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
26 mar 2012 19:59:56
1
-1

Io uso questo (dirname(get_bloginfo('stylesheet_url')))

26 mar 2012 19:31:05
Commenti

Nessuna spiegazione sul perché questa soluzione sia migliore delle altre?

fuxia fuxia
5 nov 2012 03:52:14