web-dev-qa-db-fra.com

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

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?

38
Michael Crenshaw

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" />
45
EAMann

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.

 The return values of get_bloginfo() with and without a Child Theme in WordPress 
(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:

32
MikeSchinkel

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é:

  • utilisez get_template_directory_uri() pour faire référence à only ou parent theme
  • utilisez get_stylesheet_directory_uri() à seulement ou enfant thème
12
Rarst