Comment puis-je obtenir l'URL du thème en PHP?

38

Je dois obtenir l'URL de mon répertoire de thèmes pour référencer une image dans le répertoire images / en-têtes du thème. Comment cela se fait-il en PHP?

Michael Crenshaw
la source

Réponses:

47

Cette fonction renverra l'URL du répertoire du thème afin que vous puissiez l'utiliser dans d'autres fonctions:

get_bloginfo('template_directory');

Sinon, cette fonction fera écho à l'URL du répertoire du thème du navigateur:

bloginfo('template_directory');

Ainsi, un exemple d'image dans le images/headersdossier themes serait:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
EAMann
la source
REMARQUE: cela vous donnera le chemin du thème parent si vous utilisez actuellement un thème enfant et non le thème enfant actif. Une réponse plus longue ci-dessous explique cela plus en détail.
Jason
2
Vous pouvez simplement utiliserget_template_directory_uri()
Pei
32

Ce que @EAMann a dit, avec une mise en garde. Eric a raison sur l'approche générale et sur le fonctionnement des fonctions bloginfo()et du get_bloginfo()travail, ainsi que sur la manière de transmettre le paramètre 'template_directory'pour obtenir la valeur dont vous avez besoin pour la plupart des thèmes.

Cependant, il y a une mise en garde et cette mise en garde est avec les nouveaux thèmes de l'enfant . Si vous utilisez un thème enfant, ce 'template_directory'n’est probablement pas ce que vous voulez, sauf si vous essayez de vous référer à une image qui se trouve dans le répertoire du thème parent. Au lieu de cela pour les thèmes de l' enfant ce que vous voulez sans doute est de passer stylesheet_directory(je sais, je sais, les noms ne vous disent pas ce qu'ils sont mais bon, c'est juste la façon dont il est!) Empruntant un peu de la réponse d'Eric à l' aide stylesheet_directoryressemblerait à ceci ( J'ai raccourci l'exemple pour ne pas envelopper):

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

Pour illustrer ce point, j’ai écrit un fichier autonome rapide que vous pouvez déposer à la racine de votre site Web au fur test.phpet à mesure de l’exécution et voir ce qu’il génère. D'abord exécuté avec un thème régulier comme TwentyTen, puis avec un thème enfant:

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

Si vous remarquez des choses, vous remarquerez peut-être qu'il y a beaucoup plus à ce que vous pouvez transmettre bloginfo()et get_bloginfo(); étudiez le code et la capture d'écran ci-dessous pour des idées.

En regardant la capture d'écran, vous pouvez voir que stylesheet_directoryrevient la même chose que 'template_directory' pour un thème standard est renvoyée, mais une valeur différente et probablement celle dont vous avez besoin pour un thème enfant.

Les valeurs de retour de get_bloginfo () avec et sans thème enfant dans WordPress
(la source: mikeschinkel.com )

Pour plus de clarté sur cette capture d'écran, wp30.devest un domaine qui s'exécute uniquement sur mon ordinateur local. C'est actuellement une instance de WordPress 3.0.1 et il est configuré à 127.0.0.1(même que localhost) sur mon ordinateur portable et je l'utilise pour tester des exemples ad-hoc comme celui-ci. j'ai utilisé VirtualHostX à titre de commodité sous Mac OS X pour m'aider à configurer ces .devdomaines privés non routables , mais tout le monde peut le faire manuellement en modifiant le fichier hosts de l'ordinateur et le fichier? fichier httpd.conf.

À propos, au cas où vous ne connaissez pas thèmes pour enfants, deux autres réponses WordPress pourraient vous aider:

Mike Schinkel
la source
Wow, bonne réponse. J'étais paresseux avec le thème sur lequel je travaille maintenant et je n'ai pas créé de thème pour enfants, mais ce sera très utile dans le futur. Félicitations pour ce script aussi. Bien codé. Merci!
Michael Crenshaw
Salut, bonne réponse! Je l'utilise habituellement get_stylesheet_directory_uri(). Devrais-je utiliser plain ol ' get_stylesheet_directory()?
DJB
13

Toute la structure du thème repose sur deux options: template(en conservant le nom du dossier de thème parent) et en stylesheet(le nom de dossier du thème enfant). S'il n'y a pas de thème enfant utilisé, ce sont les mêmes.

Pour avoir la flexibilité des filtres, plutôt que l'option d'accès direct, il existe en conséquence get_template()et get_stylesheet().

Il ne reste plus maintenant qu’à combiner ceux-ci avec l’emplacement du dossier de thèmes. Cela peut être fait avec get_theme_root_uri()et à nouveau bien emballé get_template_directory_uri()et get_stylesheet_directory_uri().

[get_]bloginfo() avec template_directory ou des stylesheet_directoryarguments ne fait que les envelopper et il y a peu de raisons de l’utiliser comme ça. Je dirais qu'il est seulement déroutant d'avoir l'argument disant directory (concerne généralement les chemins locaux), mais de retourner les URL.

Résumé:

  • utiliser get_template_directory_uri()pour désigner seul thème ou un thème parent
  • utiliser get_stylesheet_directory_uri()à seulement ou enfant thème
Rarst
la source
-1

Je l'utilise (dirname(get_bloginfo('stylesheet_url')))

fja3omega
la source
1
Aucune explication pourquoi c'est mieux que les autres solutions?
fuxia