Cet article est une traduction du tutoriel How To Create a WordPress Theme rédigé par Ian Stewart, l’auteur du framework WordPress Thematic disponible sur son site ThemeShaper. Avec son aimable autorisation et mes remerciements.
Vous avez construit la liste de tous vos articles dans index.php. Maintenant il faut créer un template pour afficher chaque élément individuellement (et gérer lorsqu’il n’y a rien à afficher).
Le Modèle pour les Templates
La structure de single.php (et de presque tous les autres templates que nous allons créer) est pratiquement la même que index.php. En fait on peut considérer que c’est notre modèle de template.
Il va quand même y avoir quelques différences, à commencer par the_post() et comments_template().
Nous allons appeler the_post() prêt du haut de la page juste après l’ouverture de la div #content et avant la navigation entre pages d’articles. Nous n’avons pas besoin d’une boucle dans ce template car WordPress sait déjà quel article nous voulons afficher grâce au lien généré par the_permalink().
Et comme c’est un article unique, nous allons y ajouter la gestion des commentaires avec comments_template(). De plus nous voulons séparer les commentaires des trackbacks (rétroliens ou pings), il faut donc appeler la fonction comme ceci :
1
<?php comments_template('',true);?>
comments_template() doit être placé juste avant la fermeture de la div #content, après la navigation.
Navigation entre Articles
Au lieu d’utiliser les mal nommés next_posts_link() et previous_posts_link() nous allons utiliser previous_post_link() et next_post_link() qui sont plus appropriés. Eux, font exactement ce à quoi on s’attend.
Si vous vous rappelez notre leçon sur header.php, nous avons utilisé des instructions IF pour faire en sorte que le titre des articles soient visibles des moteurs de recherche. Nous allons en tirer avantage ici, et dans les autres templates, en mettant le titre dans une balise h1.
1
<h1 class="entry-title"><?php the_title();?></h1>
Vous remarquerez aussi que le code pour le titre est également plus simple. C’est l’avantage ici de n’avoir rien à lier.
Liens Utiles pour les Articles Uniques
La gestion des liens utiles est plutôt complexe. Vous allez donc voir ici le bénéfice de s’appuyer sur les épaules de quelqu’un d’autre qui a déjà codé cela pour vous.
Avant de regarder le code, penchons-nous sur les raisons qui font que c’est complexe. En raison de la manière dont sont gérés les commentaires dans WordPress, nous devons prendre en compte différents scenarii : commentaires et trackbacks (= ping ou rétroliens) ouverts, seulement les trackbacks ouverts, seulement les commentaires ouverts ou commentaires et trackbacks fermés. Ce qui aboutit à un enchevêtrement d’instructions IF.
Cela peut-être déroutant mais le code est commenté et il suffit de suivre les blocs d’instructions IF et ELSIF pour comprendre.
Nous voulons également afficher un lien vers notre permalien pour permettre l’enregistrement dans les favoris et un lien vers le flux RSS de cet article, très utile pour suivre les conversations.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div class="entry-utility"><?phpprintf( __('This entry was posted in %1$s%2$s. Bookmark the <a href="%3$s" title="Permalink to %4$s" rel="bookmark">permalink</a>. Follow any comments here with the <a href="%5$s" title="Comments RSS to %4$s" rel="alternate" type="application/rss+xml">RSS feed for this post</a>.','your-theme'),
get_the_category_list(', '),
get_the_tag_list( __(' and tagged ','your-theme'),', ',''),
get_permalink(),
the_title_attribute('echo=0'),
comments_rss())?><?phpif(('open'==$post->comment_status)&&('open'==$post->ping_status)):// Comments and trackbacks open ?><?phpprintf( __('<a class="comment-link" href="#respond" title="Post a comment">Post a comment</a> or leave a trackback: <a class="trackback-link" href="%s" title="Trackback URL for your post" rel="trackback">Trackback URL</a>.','your-theme'), get_trackback_url())?><?phpelseif(!('open'==$post->comment_status)&&('open'==$post->ping_status)):// Only trackbacks open ?><?phpprintf( __('Comments are closed, but you can leave a trackback: <a class="trackback-link" href="%s" title="Trackback URL for your post" rel="trackback">Trackback URL</a>.','your-theme'), get_trackback_url())?><?phpelseif(('open'==$post->comment_status)&&!('open'==$post->ping_status)):// Only comments open ?><?php _e('Trackbacks are closed, but you can <a class="comment-link" href="#respond" title="Post a comment">post a comment</a>.','your-theme')?><?phpelseif(!('open'==$post->comment_status)&&!('open'==$post->ping_status)):// Comments and trackbacks closed ?><?php _e('Both comments and trackbacks are currently closed.','your-theme')?><?phpendif;?><?php edit_post_link( __('Edit','your-theme'),"\n\t\t\t\t\t<span class=\"edit-link\">","</span>")?></div><!--.entry-utility -->
Contenu de l’Article
Au contraire de index.php, le contenu est plutôt simple. Un seul appel de fonction suivi de wp_link_pages().
Peu de personnes utilisent les fichiers attachés bien qu’ils soient assez intéressants. Quand vous ajoutez une image à votre article, en fait vous l’attachez à l’article. Et bien évidemment, vous pouvez attacher plus que des images. Nous allons mettre en place un template attachment.php que vous pourrez adapter si vous le voulez par la suite à d’autres types de fichiers comme des vidéos, de l’audio ou des applications en développant des templates video.php, audio.php et application.php. Il existe plein de manières d’être créatif avec les rattachements WordPress.
Le plus simple est de copier single.php, le renommer en attachment.php et de faire les modifications qui suivent.
Premièrement supprimez la navigation du haut, nous n’en avons pas besoin. Remplacez-la par un titre de page qui fait un lien vers l’article parent.
Comme nous avons mis le titre de la page dans une balise h1, le titre de notre article sera donc placé dans une balise h2 :
1
<h2 class="entry-title"><?php the_title();?></h2>
Et comme le contenu de notre template attachment doit afficher le fichier attaché, la section contenu doit donc être la suivante. De plus comme la plupart de nos fichier attachés seront des images, nous le vérifions à l’aide d’instructions IF.
Effacez maintenant la navigation du bas de ce qui était auparavant votre ancien single.php et votre template attachment.php est terminé.
Le Template 404
Une erreur 404 est le code d’erreur renvoyé par le serveur pour l’évènement « la page ne peut être trouvée » et vous devez prendre en compte cet évènement dans vos thèmes WordPress. Que se passe-t-il si un lien de votre blog a une adresse URL mal saisie? Ou bien lorsque vous supprimez un article? Votre serveur génère une erreur 404.
Heureusement, WordPress a un template pour ce cas, 404.php. La technique que j’utilise pour le template 404 est assez directe mais elle fonctionne. Affichez des excuses et un formulaire de recherche. Il peut y avoir des solutions alternatives, mais aucune ne sera plus rapide pour votre visiteur.
Retournez au modèle de template que nous avons utilisé plus haut, enlevez la navigation et ajoutez ceci à la section content :
1
2
3
4
5
6
7
<div id="post-0"class="post error404 not-found"><h1 class="entry-title"><?php _e('Not Found','your-theme');?></h1><div class="entry-content"><p><?php _e('Apologies, but we were unable to find what you were looking for. Perhaps searching will help.','your-theme');?></p><?php get_search_form();?></div><!--.entry-content --></div><!--#post-0 -->
Cet article fait partie du tutoriel Créer un Thème WordPress :
Créer un Thème WordPress : 7. Les Templates Single Post, Attachment et 404
Vous avez construit la liste de tous vos articles dans
index.php. Maintenant il faut créer un template pour afficher chaque élément individuellement (et gérer lorsqu’il n’y a rien à afficher).Le Modèle pour les Templates
La structure de
single.php(et de presque tous les autres templates que nous allons créer) est pratiquement la même queindex.php. En fait on peut considérer que c’est notre modèle de template.Il va quand même y avoir quelques différences, à commencer par
the_post()etcomments_template().Nous allons appeler
the_post()prêt du haut de la page juste après l’ouverture de la div #content et avant la navigation entre pages d’articles. Nous n’avons pas besoin d’une boucle dans ce template car WordPress sait déjà quel article nous voulons afficher grâce au lien généré parthe_permalink().Et comme c’est un article unique, nous allons y ajouter la gestion des commentaires avec
comments_template(). De plus nous voulons séparer les commentaires des trackbacks (rétroliens ou pings), il faut donc appeler la fonction comme ceci :comments_template()doit être placé juste avant la fermeture de la div #content, après la navigation.Navigation entre Articles
Au lieu d’utiliser les mal nommés
next_posts_link()etprevious_posts_link()nous allons utiliserprevious_post_link()etnext_post_link()qui sont plus appropriés. Eux, font exactement ce à quoi on s’attend.Le Titre des Articles Uniques
Si vous vous rappelez notre leçon sur
header.php, nous avons utilisé des instructions IF pour faire en sorte que le titre des articles soient visibles des moteurs de recherche. Nous allons en tirer avantage ici, et dans les autres templates, en mettant le titre dans une balise h1.Vous remarquerez aussi que le code pour le titre est également plus simple. C’est l’avantage ici de n’avoir rien à lier.
Liens Utiles pour les Articles Uniques
La gestion des liens utiles est plutôt complexe. Vous allez donc voir ici le bénéfice de s’appuyer sur les épaules de quelqu’un d’autre qui a déjà codé cela pour vous.
Avant de regarder le code, penchons-nous sur les raisons qui font que c’est complexe. En raison de la manière dont sont gérés les commentaires dans WordPress, nous devons prendre en compte différents scenarii : commentaires et trackbacks (= ping ou rétroliens) ouverts, seulement les trackbacks ouverts, seulement les commentaires ouverts ou commentaires et trackbacks fermés. Ce qui aboutit à un enchevêtrement d’instructions IF.
Cela peut-être déroutant mais le code est commenté et il suffit de suivre les blocs d’instructions IF et ELSIF pour comprendre.
Nous voulons également afficher un lien vers notre permalien pour permettre l’enregistrement dans les favoris et un lien vers le flux RSS de cet article, très utile pour suivre les conversations.
Contenu de l’Article
Au contraire de
index.php, le contenu est plutôt simple. Un seul appel de fonction suivi dewp_link_pages().Fichier Attachés
Peu de personnes utilisent les fichiers attachés bien qu’ils soient assez intéressants. Quand vous ajoutez une image à votre article, en fait vous l’attachez à l’article. Et bien évidemment, vous pouvez attacher plus que des images. Nous allons mettre en place un template
attachment.phpque vous pourrez adapter si vous le voulez par la suite à d’autres types de fichiers comme des vidéos, de l’audio ou des applications en développant des templatesvideo.php,audio.phpetapplication.php. Il existe plein de manières d’être créatif avec les rattachements WordPress.Le plus simple est de copier
single.php, le renommer enattachment.phpet de faire les modifications qui suivent.Premièrement supprimez la navigation du haut, nous n’en avons pas besoin. Remplacez-la par un titre de page qui fait un lien vers l’article parent.
Comme nous avons mis le titre de la page dans une balise h1, le titre de notre article sera donc placé dans une balise h2 :
Et comme le contenu de notre template attachment doit afficher le fichier attaché, la section contenu doit donc être la suivante. De plus comme la plupart de nos fichier attachés seront des images, nous le vérifions à l’aide d’instructions IF.
Effacez maintenant la navigation du bas de ce qui était auparavant votre ancien
single.phpet votre templateattachment.phpest terminé.Le Template 404
Une erreur 404 est le code d’erreur renvoyé par le serveur pour l’évènement « la page ne peut être trouvée » et vous devez prendre en compte cet évènement dans vos thèmes WordPress. Que se passe-t-il si un lien de votre blog a une adresse URL mal saisie? Ou bien lorsque vous supprimez un article? Votre serveur génère une erreur 404.
Heureusement, WordPress a un template pour ce cas,
404.php. La technique que j’utilise pour le template 404 est assez directe mais elle fonctionne. Affichez des excuses et un formulaire de recherche. Il peut y avoir des solutions alternatives, mais aucune ne sera plus rapide pour votre visiteur.Retournez au modèle de template que nous avons utilisé plus haut, enlevez la navigation et ajoutez ceci à la section content :