M3202 – CM #2

Développement web S3


Qu'est-ce qu'on veut faire encore ?

  • Utiliser un template pour tous les articles d'un auteur précis
  • Faire une page avec une structure différente
  • ... ?

Hiérarchie des fichiers modèles

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

  1. les fichiers modèles partiels
  2. les autres

Fichiers modèles partiels

Fichiers modèles inclus dans d'autres fichiers modèles, comme header.php, footer.php, content-page.php, etc.

Ils n'ont pas de 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.

Comment ça marche

  1. À partir de l'URL, WordPress détecte quel type de page on veut afficher
  2. Si ce fichier modèle existe, il est utilisé
  3. Si le fichier modèle n'existe pas, on passe au fichier suivant dans la hiérarchie

home.php

Le fichier home.php génère la liste de derniers articles publiés.

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 .

Les articles

Le fichier single.php génère la page d'un article.

S'il n'existe pas, alors on charge singular.php, et s'il n'existe pas, c'est index.php.

Ignorez les fichiers single-{post-type}.php

Question surprise

S'il n'y a pas de fichier home.php ni front-page.php ni index.php, quel fichier génère la page d'accueil ?

Les pages

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, et puis index.php.

Les catégories

La priorité est :

  1. category-{slug}.php
  2. category-{id}.php
  3. category.php
  4. archive.php
  5. index.php

C'est pareil pour les étiquettes (tag*.php)

Les auteurs

La priorité est :

  1. author-{nicename}.php
  2. author-{id}.php
  3. author.php
  4. archive.php
  5. index.php

Marqueurs conditionnels

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 dans quel type de page web on est.

is_home()
Vrai si la page d'accueil est la liste de derniers articles, ou si on est sur la page choisie comme «Page des articles» (voir Réglages/Lecture).
is_front_page()
Vrai si c'est la page d'accueil (liste de derniers articles ou page statique).

Question surprise

À quoi sert cette condition ?

is_single()
Vrai si c'est un article.
is_single('19')
Vrai si c'est l'article avec ID 19.
is_single('Septième article')
Vrai si c'est l'article avec titre "Septième article".
is_single('septieme-article')
Vrai si c'est l'article avec slug "septieme-article".
is_single(array(17, 'Huitième article', 'neuvieme-article'))
Vrai si c'est un de ces articles.
is_page()
Vrai si c'est une. Mêmes paramètres que is_single().
is_search()
Vrai quand c'est la page de résultats d'une recherche.
is_404()
Vrai quand c'est la page d'erreur 404.
is_singular()
Vrai si c'est un article ou une page.
is_author()
Vrai si c'est l'archive d'un auteur. Mêmes paramètres que is_single().
is_category()
Vrai si c'est la page d'une catégorie. Mêmes paramètres que is_single().
in_category('4')
Vrai si c'est un article appartenant à la catégorie avec ID = 4. Mêmes paramètres que is_single().
is_tag()
C'est comme is_category()
has_tag('oscar')
Vrai si c'est une article avec l'étiquette "oscar".

Pêle-mêle

Déboguer

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);

La boucle

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.

Fichiers modèles partiels personnalisés

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').

Conclusion

  • Deux façons de personaliser la génération de code HTML : hierarchie de fichiers modèles et marqueurs conditionnels.
  • Vous n'avez pas besoin de tous les fichiers modèles de la hierarchie.
  • Inspirez-vous des thèmes déjà faits pour ajouter vos modifications.