Je dois obtenir l'URL de mon répertoire de thème pour référencer une image dans le répertoire image/headers du thème. Comment cela se fait-il en PHP?
Cette fonction retournera 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 va echo l'URL du répertoire du thème au navigateur:
bloginfo('template_directory');
Ainsi, un exemple d'image dans le dossier themes images/headers
serait:
<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
Que dit @EAMann avec une mise en garde. Eric a raison sur l'approche générale et sur le fonctionnement des fonctions bloginfo()
et get_bloginfo()
et sur la manière de passer 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 que caveat est avec le plus récentthèmes enfants. Si vous utilisez un thème enfant, alors 'template_directory'
n'est probablement pas ce que vous voulez, sauf si vous essayez de faire référence à une image figurant dans le répertoire du thème parent. Au lieu de cela, pour les thèmes enfants, vous voulez probablement transmettre stylesheet_directory
(je sais, je sais, les noms ne vous disent pas ce qu’ils sont, mais bon, c’est comme ça!) Emprunter un peu de la réponse d’Eric en utilisant stylesheet_directory
ressemblerait ceci (j'ai raccourci l'exemple pour qu'il ne soit pas bouclé):
<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 sous le nom test.php
et exécuter pour 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 dans 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 constater que stylesheet_directory
renvoie la même chose que 'template_directory'
pour un thème standard, mais une valeur différente et probablement la valeur dont vous avez besoin pour un thème enfant.
(source: mikeschinkel.com )
Pour plus de clarté sur cette capture d'écran,
wp30.dev
est 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
(identique àlocalhost
) sur mon ordinateur portable et je l'utilise pour tester des exemples ad-hoc comme celui-ci. J'ai utilisé VirtualHostX comme commodité sur Mac OS X pour m'aider à configurer ces domaines.dev
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 seriez pas familier avecthèmes pour enfantsoù se trouvent deux autres réponses WordPress qui pourraient vous aider:
Toute la structure du thème repose sur deux options: template
(contenant le nom du dossier de thème parent) et stylesheet
(contenant 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 que les filtres soient plus flexibles que les options d'accès directement, il existe par conséquent 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 encore une fois encapsulé dans get_template_directory_uri()
et get_stylesheet_directory_uri()
.
[get_]bloginfo()
avec les arguments template_directory
ou stylesheet_directory
encapsule simplement ceux-ci et il y a peu de raisons de l'utiliser comme ça. Je dirais qu'il est seulement déroutant d'avoir un argument disant directory (concerne généralement des chemins locaux), mais de retourner des URL.
Résumé:
get_template_directory_uri()
pour faire référence à only ou parent themeget_stylesheet_directory_uri()
à seulement ou enfant thème