Ce tutoriel WordPress est entièrement gratuit.
Merci de désactiver votre bloqueur de pub ! =)

Single.php : le template dédié

L'affichage d'un seul billet nécessite un template plus riche que les autres.

Le template single.php sert à afficher un seul Post. On peut le considérer comme le dernier dans la hiérarchie des Posts :

  1. page d’accueil home.php (avec liste des derniers Posts)
  2. page d’archive archive.php ou bien plus précisément :
    • catégorie category.php
    • année, mois, ou jour date.php
    • mot-clef tag.php
    • résultats de recherche search.php
  3. page dédiée single.php

Une boucle légèrement différente

Parce qu’il joue un rôle bien précis, le template single.php va disposer d’une boucle différente. On ne va pas utiliser l’include loop.php mais plutôt le copier-coller puis le modifier.

Le code de single.php ressemble donc à ceci :

<?php get_header(); ?>
<div class="main single">
  <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
      <div class="post">
        <h1 class="post-title"><?php the_title(); ?></h1>
        <p class="post-info">
          Posté le <?php the_date(); ?> dans <?php the_category(', '); ?> par <?php the_author(); ?>.
        </p>
        <div class="post-content">
          <?php the_content(); ?>
        </div>
        <div class="post-comments">
          <?php comments_template(); ?>
        </div>
      </div>
    <?php endwhile; ?>
  <?php endif; ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

On retrouve la div « main » qui peut servir de colonne principale. J’ai rajouté la classe « single » qui nous permettra de différencier le style des post-title, post-info, post-content… si besoin est.

La boucle n’est plus appelée via l’include loop.php mais est directement intégrée à single.php :

C’est la seule fois où l’on verra le contenu d’un Post s’affiche en entier.

Une discussion, des commentaires

La fonction comments_template() génère :

Beaucoup de choses pour une seule fonction, n’est-ce pas ?

Ce qu’il faut savoir, c’est que ce template de commentaires est intégré à WordPress. En effet, il est n’est pas nécessaire de créer un template/include comments.php pour que cette fonction affiche quelque chose. Libre à vous néanmoins d’en créer un vous même, mais je ne vous le conseille pas. Le fichier comments.php est une usine à gaz.

Avant WordPress 3, comments.php contenait non seulement le code entier de la liste des commentaires mais aussi le code entier du formulaire. Je l’avais « nettoyé » et amélioré pour qu’il soit plus lisible, plus facile à modifier et plus correct au niveau du HTML.
Depuis WordPress 3, je préfère laisser le template de base qui génère un code globalement correct.

Différence avec page.php

Si single.php est le template dédiée à l’affichage d’un seul Post, page.php est celui dédiée à l’affichage d’une Page. Du coup, leur similitude semble évidente. Mais il faudra tout de même passer par deux templates et pas qu’un car WordPress fonctionne ainsi : single.php pour les Posts, page.php pour les Pages, et pas moyen de les fusionner.

En même temps, une Page a des informations dififérentes à afficher :

En somme, on reprend le code de single.php et on en enlève des morceaux pour créer page.php :

<?php get_header(); ?>
<div class="main page">
  <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
      <div class="post">
        <h1 class="post-title"><?php the_title(); ?></h1>
        <div class="post-content">
          <?php the_content(); ?>
        </div>
      </div>
    <?php endwhile; ?>
  <?php endif; ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

La classe « single » devient une classe « page » et l’on supprime les parties « post-info » et « post-comments ».