M3202 — CM #3

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

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.

Comment ça marche

  • À partir de l'URL, WordPress détecte quel type de page on veut afficher
  • Si ce fichier modèle existe, il est utilisé
  • 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 (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

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.

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

is_home()
Vrai si la page d'accueil est la liste de derniers articles, ou si on est 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).
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. Ça marche comme 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. Ça marche comme is_single().
is_category()
Vrai si c'est la page d'une catégorie. Ça marche comme is_single().
in_category('4')
Vrai si c'est un article appartenant à la catégorie avec ID = 4. Ça marche comme is_single().
is_tag()
C'est comme is_category()
has_tag('oscar')
Vrai si c'est une article avec l'étiquette "oscar". Il faut l'utiliser dans la boucle while.

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

Contenu

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.

Fichiers CSS et JS

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.

À rendre (aujourd'hui)

Soumettre une bonne (!) question sur ce qu'on a vu aujourd'hui dans «Question à rendre du CM n° 3»