La hiérarchie des fichiers modèles (template hierarchy) est la logique utilisée par WordPress pour décider quel fichier modèle est utilisé.
Il y a deux types de fichiers modèles (PHP sans fonctions) :
Ils sont les fichiers modèles qui sont inclus dans d'autres fichiers modèles, comme header.php
, footer.php
, content-page.php
, etc.
Ils n'utilisent pas la fonction get_header()
.
Ils sont inclus avec des marqueurs de modèle (template tags, fonctions PHP de WordPress) : get_header
, get_footer()
, comments_template()
...
Les autres fichiers modèles sont ceux qu'on trouve dans le diagramme de la hiérarchie de fichiers modèles.
home.php
Le fichier home.php
génère la liste de derniers articles publiés (blog posts index). Il est chargé quand la page d'accueil est une page statique.
Si elle n'existe pas, alors on charge index.php
front-page.php
Le fichier front-page.php
génère la page d'accueil.
S'il n'existe pas, alors on charge home.php
ou page.php
, selon ce qu'on a choisi dans le menu Réglages/Lecture dans le back office.
single.php
Le fichier single.php
génère la page d'un article.
S'il n'existe pas, alors on charge singular.php
Ignorez les fichiers single-{post-type}.php
Le fichier page-{slug}.php
ou page-{id}.php
génère le code source de la page avec ces slugs/ids.
S'ils n'existent pas, alors on charge page.php
.
Sinon, c'est singular.php
.
La priorité est :
category-{slug}.php
category-{id}.php
category.php
archive.php
index.php
C'est pareil pour les étiquettes (tag*.php
)
La priorité est :
author-{nicename}.php
author-{id}.php
author.php
archive.php
index.php
Il y a une autre façon de personnaliser les pages :
<?php if (is_author('martin')) : ?>
<!-- afficher quelque chose pour la liste d’articles signés par martin -->
<?php else : ?>
<!-- afficher autre chose pour le reste des utilisateurs -->
<?php endif; ?>
Ainsi, on n'a pas besoin de créer le fichier author-martin.php
ni author-3.php
.
Un marqueur conditionnel (conditional tag) est une fonction de WordPress qui renvoie un booléen (true ou false).
On peut les utiliser pour savoir manuellement dans quel type de page on est.
is_home()
is_front_page()
is_single()
is_single('19')
is_single('Septième article')
is_single('septieme-article')
is_single(array(17, 'Huitième article', 'neuvieme-article'))
is_page()
is_single()
.is_search()
is_404()
is_singular()
is_author()
is_single()
.is_category()
is_single()
.in_category('4')
is_single()
.is_tag()
is_category()
has_tag('oscar')
Pour déboguer sur WordPress, on active les réglages suivants dans le fichier wp-config.php
:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
On utilise une boucle pour charger une liste d'articles ou commentaires :
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
... Display post content
<?php endwhile; ?>
<?php endif; ?>
Dedans on utilise les fonctions the_content()
, the_excerpt()
, next_post()
, etc.
On peut créer des fichiers modèles partiels personnalisés. Par exemple, on crée le fichier header-martin.php
et on l'importe avec la fonction get_header('martin')
.
En géneral, on peut importer n'importe quel fichier X-Y.php
avec get_template_part('X', 'Y')
.
Les fichiers modèles génèrent le code HTML avec la structure de la page web.
Pourtant, le contenu de la page (ce qui est stocké dans la BDD) est inséré avec la fonction get_template_part('content', 'X')
, qui inclut le fichier content-X.php
.
Comme WordPress s'occupe de charger le thème et les plugins, on ne peut pas faire les liens vers les fichiers CSS et JS directement dans les fichiers header.php
et footer.php
.
On les ajoute avec les fonctions wp_enqueue_style()
et wp_enqueue_script()
dans le fichier functions.php
.
Soumettre une bonne (!) question sur ce qu'on a vu aujourd'hui dans «Question à rendre du CM n° 3»