Utilisation des templates alternatifs pour les articles

Pouvoir choisir un template différent pour un contenu article particulier est possible avec Wordpress. Il faut créer un template, et lui associer quelques informations en entete. Démonstration.

But visé

Il s’agit pour notre thème de disposer d’une mise en page alternative pour les articles.
Les articles, en effet, sont affichés comme ceci :

mais on voudrait pour certains articles les présenter comme ceci :

soit une mise en page différente, avec le logo àgauche.

Créer un template

Pour faire ceci, nous allons créer un template auquel nous allons donner un nom qui n’est pas un nom standard de template : il ne peut pas s’agir de home.php ou de archive.php, qui sont des noms reconnus par Wordpress comme des noms de template spécifique àun usage.
Dans notre cas, nous allons l’appeler "single-perso.php" puisque le template de base s’appelle "single.php", et ce sera facile de se souvenir qu’il s’agit d’un template lié àla page single.

Pour des questions de commodité, le template sera placé dans un sous-doosier du thème appelé "templates". Wordpress reconnait le nom de ce dossier et va le parcourir pour y trouver des templates.

Coder le template

Pour pouvoir identifier le fichier comme un template alternatif pour les posts, Wordpress analyse l’entête de ce fichier.
Il faut obligatoirement y placer :
 un nom spécifique et unique
 le type de contenu que peut prendre en charge le template

Voici le code de notre template :

<?php
/*
Template Name: Affichage large
Template Post Type: post, page
 */
?>

on remarquera que le Template Post Type indique que le template peut être associé aussi bien aux posts qu’aux pages.

On code ensuite tout ce qui est nécessaire àla bonne marche du fichier. Dans notre cas, voici le code complet.

<?php
/*
Template Name: Affichage large
Template Post Type: post, page
 */
?>
<?php get_header(); ?>

<div id="main" class="container separetop">
    <?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>
    <article class="row">
        <div class="col-6">
            <?php the_post_thumbnail('vignette jumbo', array( 'class' => 'mb-3' )); ?>
            <div class="categories small">
               Catégorie : <?php the_category(', '); ?>
            </div>
        </div>
        <div class="col-6">
            <div class="post" id="post-<?php the_ID(); ?>">
                <h2><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
                <div class="post_content">
                    <?php the_content(); ?>
                </div>
            </div>
        </div>

    </article>
    <!-- lien vers page precedente et suivante -->
    <div class="row">
        <div class="col-6">
            <?php previous_post('&laquo; %',' ', 'yes'); ?>
        </div>
        <div class="col-6 text-right">
            <?php next_post('% &raquo;',' ', 'yes'); ?>
        </div>
    </div>
    <?php endwhile; ?>
    <?php endif; ?>
</div>

<?php get_footer(); ?>