Come posso ottenere l'URL del tema in PHP?


38

Devo ottenere l'URL della mia directory del tema per fare riferimento a un'immagine nella directory image / headers del tema. Come viene fatto in PHP?

Risposte:


47

Questa funzione restituirà l'URL della directory del tema in modo da poterlo utilizzare in altre funzioni:

get_bloginfo('template_directory');

In alternativa, questa funzione farà eco all'URL della directory del tema nel browser:

bloginfo('template_directory');

Quindi un esempio per un'immagine nella images/headerscartella dei temi sarebbe:

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

NOTA: questo ti darà il percorso del tema principale se stai attualmente usando un tema figlio e non il tema figlio attivo. Una risposta più lunga di seguito spiega questo in modo più dettagliato.
Jason,

2
Puoi semplicemente usareget_template_directory_uri()
Pei

32

Cosa ha detto @EAMann , con un avvertimento. Eric ha ragione sull'approccio generale e su come funzioni bloginfo()e get_bloginfo()funzioni e su come passare il parametro 'template_directory'per ottenere il valore necessario per (la maggior parte) temi.

Tuttavia c'è un avvertimento e questo avvertimento è con i nuovi temi del bambino . Se si utilizza un tema figlio, 'template_directory'probabilmente non è quello che si desidera a meno che non si stia effettivamente cercando di fare riferimento a un'immagine che si trova nella directory del tema principale. Invece per i temi dei bambini quello che probabilmente vorrai è passare stylesheet_directory(lo so, lo so, i nomi non ti dicono quali sono ma ehi, è così che è!) Prendere in prestito un po 'dalla risposta di Eric usando stylesheet_directorysarebbe simile a questo ( Ho abbreviato l'esempio in modo che non andasse a capo):

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

Per illustrare il punto in cui ho scritto un rapido file autonomo, puoi rilasciarlo come root del tuo sito Web test.phped eseguire per vedere cosa produce. Prima corri con un tema normale come TwentyTen, quindi corri con un tema figlio:

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

Se noti cose, potresti notare che c'è molto di più in ciò a cui puoi passare bloginfo()e get_bloginfo(); studiare il codice e lo screenshot qui sotto per idee.

Guardando lo screenshot puoi vedere che stylesheet_directoryrestituisce la stessa cosa 'template_directory'di un tema normale ma un valore diverso e probabilmente il valore che ti serve per un tema figlio.

I valori di ritorno di get_bloginfo () con e senza un tema figlio in WordPress
(fonte: mikeschinkel.com )

Per chiarezza su questo screenshot, wp30.devè un dominio che viene eseguito solo sul mio computer locale. Al momento è un'istanza di WordPress 3.0.1 ed è configurata sul 127.0.0.1(uguale a localhost) sul mio laptop e lo uso per testare esempi ad-hoc come questo. Ho usato VirtualHostX per praticità su Mac OS X per aiutarmi a configurare quei .devdomini privati ​​non instradabili, ma chiunque può farlo manualmente modificando il file hosts del computer e il? file httpd.conf.

A proposito, nel caso in cui non si abbia familiarità con Temi figlio in cui sono presenti altre due risposte WordPress che potrebbero essere di aiuto:


Caspita, ottima risposta. Ero pigro con il tema su cui sto lavorando ora e non ho impostato un tema figlio, ma questo sarà molto utile in futuro. Congratulazioni anche per quella sceneggiatura. Ben-coded. Grazie!
Michael Crenshaw,

Ciao, bella risposta! Di solito uso get_stylesheet_directory_uri(). Dovrei usare plain ol ' get_stylesheet_directory()?
DJ

13

L'intera struttura del tema si basa su due opzioni: template(tenendo il nome della cartella del tema principale) e stylesheet(tenendo il nome della cartella del tema figlio). Se non viene utilizzato alcun tema figlio, questi sono gli stessi.

Per avere la flessibilità dei filtri, piuttosto che accedere direttamente all'opzione, ci sono di conseguenza get_template()e get_stylesheet().

Ora l'unica cosa che manca è combinare quelli con la posizione della cartella dei temi. Questo può essere fatto con get_theme_root_uri()e di nuovo comodamente avvolto in get_template_directory_uri()e get_stylesheet_directory_uri().

[get_]bloginfo()con template_directoryo stylesheet_directoryargomenti semplicemente li avvolge e ci sono poche ragioni per usarlo in quel modo. Direi che è solo confuso avendo argomento dicendo directory (comunemente si riferisce a percorsi locali), ma restituendo URL.

Sumary:

  • utilizzare get_template_directory_uri()per fare riferimento solo al tema principale o genitore
  • utilizzare get_stylesheet_directory_uri()per solo o il bambino a tema

-1

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


1
Nessuna spiegazione perché è meglio delle altre soluzioni?
fuxia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.