Flux RSS
Firefox1

Créer sa liste de livres avec WordPress

Vous voulez créer votre propre liste de livres (ou de films, etc), comme celle présente sur ce blog ? Vous êtes au bon article, je vais vous expliquer une façon simple pour d’une part afficher les informations les unes en dessous des autres pour chaque article (que j’avais observé chez If is Dead et que je trouvais très astucieux, seulement je crois qu’eux passent par un système de tags et je ne voyais pas très bien comment ils faisaient…), et d’autre part pour récupérer ces informations et les afficher dans une page WordPress. Je voudrais préciser que je découvre WordPress et qu’il existe donc peut-être de meilleures méthodes.

Tout d’abord il faut savoir que les articles affichés doivent être dans une même catégorie, donc si ce n’est pas fait, créez une nouvelle catégorie que vous nommerez Livres par exemple. Pour ce tutoriel je vais penser que vous souhaitez afficher une liste de livres, remplacez livres par films ou ce que vous voulez si ce n’est pas ce que vous souhaitez faire.

Pour stocker les informations que nous souhaitons afficher et utiliser, nous allons utiliser les Champs personnalisés, disponibles en dessous de la zone de rédaction lorsque vous créez/modifiez un article.
L’avantage de ces champs, c’est qu’une fois que vous les avez créé pour un article, ils apparaissent dans une liste déroulante pour l’article suivant, et ils vous suffit d’entrer la valeur dans le champ valeur à droite de la liste déroulante.

Les Champs personnalisés sous WordPress

Les Champs personnalisés sous WordPress

Vous pouvez les nommer comme vous le souhaitez, mais si vous devez le changer, il vous faudra le changer partout.

Afficher les informations

Maintenant que vous avez vos champs personnalisés, il nous faut les afficher, en dessous de chaque article. Pour cela, ouvrez votre logiciel d’édition de fichier (IDE, Notepac++ ou même le bloc-note peut suffire), et ouvrez le fichier /wp-content/themes/{votretheme}/post.php .
N’ayez pas peur il n’y a quasiment rien à modifier, en réalité, nous allons juste ajouter « the_meta(); » à un endroit bien précis.

Cherchez dans votre page « echo $content; ». Cette ligne sert à afficher le contenu du post, donc avant cette ligne, vous ajoutez « the_meta(); ». Ce qui vous donne :

  1. the_meta();
  2. echo $content;

Bien, maintenant que vous avez fait cela, actualisez la page ou est affiché votre article et vous verrez les champs personnalisés apparaître sur la page d’accueil. Ils ne seront sûrement pas affichés comme moi, mais là, c’est seulement une histoire de CSS et je ne traiterais pas cela dans cet article.

/!\ Attention /!\ Il se peut que votre thème fasse un echo $content à plusieurs endroits du fichier, comme je ne vais pas vous expliquer le langage PHP en entier, si les informations ne s’affichent pas sur la page d’accueil ou dans la page de recherche, essayez de positionner le « the_meta(); » un peu plus haut dans le fichier, jusqu’à ce qu’elles s’affichent correctement. C’est un peu barbare comme explication mais c’est la seule que je puisse vous fournir.

Maintenant, nous allons les faire apparaitre lorsque l’on veut afficher un seul article. Pour cela, ouvrez le fichier single.php, dans le même dossier, et cherchez « the_content(__(« . Juste avant cela, ajoutez « the_meta(); » et c’est terminé !

Voilà, vous avez affiché les informations, créons maintenant notre liste.

La liste

Le code de la liste est un peu plus compliqué, et c’est pourquoi je ne l’expliquerais pas, je vais seulement vous expliquer comment créer la page qui affichera la liste.

Donc tout d’abord, allez dans votre panneau d’administration WordPress, rendez vous dans Pages et créez une nouvelle page. Donnez-lui un nom, et enregistrez, sans avoir fait quoi que ce soit d’autre.

Nous allons associer un modèle à cette page qui se chargera d’afficher tout. Donc reprenez votre éditeur de texte, et créez un nouveau fichier PHP, vous pouvez l’appeler comme vous voulez, il suffit qu’il ait l’extension .php. Pour moi, ce sera « page-livres.php ». Enregistrez ce fichier dans le même dossier que les pages que nous avons édité précédemment.

Voici ce que doit contenir cette page, cela devrait fonctionner pour tous les thèmes, je ne l’ai testé que sur le mien mais si il y a des modifications à faire, elles ne peuvent être que mineures et il ne peux s’avérer que d’un problème de mise en page. Toutes les données à modifier (ou pas si vous avez tout pareil que moi), sont les constantes définies en haut de la page (define(‘…’, ‘…’)); (ne modifiez que ce qu’il y a entre les quotes après la virgule surtout !).

  1. <?php
  2. /*
  3.  Template Name: Livres
  4.  */
  5. get_header();
  6. define(‘PREFIX’, ‘wp_’);
  7. define(‘AUTEUR’, ‘Auteur’);
  8. define(‘SERIE’, ‘Série’);
  9. define(‘TOME’, ‘Tome’);
  10. define(‘EDITEUR’, ‘Editeur’);
  11. define(‘ANNEE’, ‘Année’);
  12. define(‘TITLE’, ‘Titre’);
  13. $by_diff = array(‘auteur’, ‘serie’); //différentes sortes de classement
  14. $typeofsearch = (!empty($_GET[‘by’]) && in_array($_GET[‘by’], $by_diff)) ? $_GET[‘by’] : ‘auteur’;
  15. $sup =  »;
  16. $afficher =  »;
  17. $is_cycle_search = FALSE;
  18. if(!empty($_GET[‘a’])) {
  19.     $sup = ‘AND mauteur.meta_value = "’. $wpdb->escape(stripslashes(urldecode($_GET[‘a’]))) .‘"’;
  20.     $afficher = htmlspecialchars(stripslashes(urldecode($_GET[‘a’])));
  21. }
  22. elseif(!empty($_GET[‘c’])) {
  23.     $sup = ‘AND mserie.meta_value = "’. $wpdb->escape(stripslashes(urldecode($_GET[‘c’]))) .‘"’;
  24.     $afficher = htmlspecialchars(stripslashes(urldecode($_GET[‘c’])));
  25.     $is_cycle_search = TRUE;
  26. }
  27. elseif(!empty($_GET[‘e’])) {
  28.     $sup = ‘AND mediteur.meta_value = "’. $wpdb->escape(stripslashes(urldecode($_GET[‘e’]))) .‘"’;
  29.     $afficher = htmlspecialchars(stripslashes(urldecode($_GET[‘e’])));
  30. }
  31. ?>
  32. <!– main content: primary + sidebar(s) –>
  33.   <div id="main">
  34.    <div id="main-inside" class="clearfix">
  35.     <!– primary content –>
  36.     <div id="primary-content">
  37.         <h1 class="title archive-tag">Liste des <span class="altText">livres</span></h1>
  38.               <?php
  39.               $q = ‘SELECT p.ID AS id, mtitle.meta_value AS title, p.post_name AS url, mauteur.meta_value AS auteur, mserie.meta_value AS serie, mtome.meta_value AS tome, mcouv.guid AS couverture, mediteur.meta_value AS editeur, mannee.meta_value AS annee
  40.                                                     FROM ‘. PREFIX .‘posts p
  41.                                                     LEFT JOIN ‘. PREFIX .‘postmeta mauteur ON mauteur.post_id = p.ID AND mauteur.meta_key = "’. AUTEUR .‘"
  42.                                                     LEFT JOIN ‘. PREFIX .‘postmeta mserie ON mserie.post_id = p.ID AND mserie.meta_key = "’. SERIE .‘"
  43.                                                     LEFT JOIN ‘. PREFIX .‘postmeta mtitle ON mtitle.post_id = p.ID AND mtitle.meta_key = "’. TITLE .‘"
  44.                                                     LEFT JOIN ‘. PREFIX .‘postmeta mtome ON mtome.post_id = p.ID AND mtome.meta_key = "’. TOME .‘"
  45.                                                     LEFT JOIN ‘. PREFIX .‘postmeta mediteur ON mediteur.post_id = p.ID AND mediteur.meta_key = "’. EDITEUR .‘"
  46.                                                     LEFT JOIN ‘. PREFIX .‘postmeta mannee ON mannee.post_id = p.ID AND mannee.meta_key = "’. ANNEE .‘"
  47.                                                     LEFT JOIN ‘. PREFIX .‘posts mcouv ON mcouv.post_parent = p.ID AND mcouv.post_type = "attachment"
  48.                                                     LEFT JOIN ‘. PREFIX .‘term_relationships trs ON trs.object_id = p.ID
  49.                                                     LEFT JOIN ‘. PREFIX .‘term_taxonomy tt ON trs.term_taxonomy_id = tt.term_taxonomy_id
  50.                                                     LEFT JOIN ‘. PREFIX .‘terms t ON tt.term_id = t.term_id
  51.                                                     WHERE p.post_status = "publish" AND tt.taxonomy = "category" AND t.term_id = 4 ‘. $sup .
  52.                                                     GROUP BY p.id
  53.                                                     ORDER BY m’. $typeofsearch .‘.meta_value ASC, mserie.meta_value ASC, mtome.meta_value ASC’;
  54.               $results = $wpdb->get_results($wpdb->prepare($q));
  55.               $letter =  »;
  56.               $cycles = array();
  57.               $echo_aff = false;
  58.               foreach($results as $article) { // parcourt les résultats
  59.                       if($letter != strtoupper(substr($article->$typeofsearch, 0, 1))) {
  60.                           if(empty($afficher)) {
  61.                               $letter = strtoupper(substr($article->$typeofsearch, 0, 1));
  62.                               echo ‘<div class="divider"></div>
  63.                                 <h2 class="title" align="center">’. $letter .‘</h2>’;
  64.                           }
  65.                           elseif(!$echo_aff) {
  66.                               echo ‘<div class="divider"></div>
  67.                                         <h2 class="title altText" align="center">’. $afficher .‘</h2>’;
  68.                           }
  69.                           $echo_aff = true;
  70.                       }
  71.                       if(!$is_cycle_search) {
  72.                             if(in_array($article->serie, $cycles)) {
  73.                                 continue;
  74.                             }
  75.                             else {
  76.                                 $cycles[] = $article->serie;
  77.                             }
  78.                       }
  79.                       echo ‘<div><span class="post-thumb alignleft"><img class="attachment-post-thumbnail wp-post-image" src="’. $article->couverture .‘" width="64px" height="64px" /></span><h4 class="title">’;
  80.                       if(!empty($article->serie)) {
  81.                         if(!$is_cycle_search) {
  82.                             echo ‘<a href="./livres?c=’. urlencode($article->serie) .‘">’. $article->serie .‘</a>’;
  83.                         }
  84.                         else {
  85.                             echo ‘Tome ‘. $article->tome .‘ : ‘;
  86.                         }
  87.                       }
  88.                       if(empty($article->serie) || $is_cycle_search) {
  89.                           echo ‘<a href="./’. $article->url .‘">’. $article->title .‘</a>’;
  90.                       }
  91.                       echo ‘</h4>de <a href="./livres?a=’. urlencode($article->auteur) .‘">’. $article->auteur .‘</a>, édité par <a href="./livres?e=’. urlencode($article->editeur) .‘">’. $article->editeur .‘</a> en ‘. $article->annee .‘.</div>
  92.                         <div class="no_float"></div>’;
  93.             }
  94.             if(empty($results)) {
  95.                 echo ‘<h2 class="title"><span class="error">Aucun résultat.</span>Votre recherche n\’a retourné aucun résultat.</h2>’;
  96.             }
  97.               ?>
  98.     </div>
  99.     <?php get_sidebar(); ?>
  100.    </div>
  101.   </div>
  102. <?php
  103. get_footer();
  104. ?>

Pour assigner ce modèle, rendez-vous dans votre panneau d’administration, modifiez la page Livres que vous aviez créé, et sur la droite, dans Attributs, choisissez « Livres » dans la liste déroulante juste en dessous de « Modèle« .

Voilà, n’hésitez pas à me faire part des problèmes que vous avez rencontrés surtout, ou des améliorations que vous avez faites !

Cela me donnerait presque mal à la tête :D
Déjà trop compliqué pour moi… (mais je ne suis pas sous wordpress, comme ça !)

Le plus dur sous wordpress, c’est de l’installer :D

Merci pour cette information interessante

Laissez un commentaire