Gestion des commentaires et Gravatar
Comme vous pourrez peut-être le constater, après cette mise à jour de mon thème, je continue de le peaufiner un peu, et aujourd'hui, je me suis occupé de la section dédiée aux commentaires. J'en ai même profité pour appliquer le plugin Nofollow Free, pour mieux vous servir. Après quelques recherches sur le web, afin de trouver le code d'origine séparant les trackbacks et les commentaires, je suis tombé sur cet excellent tutoriel de Amaury.
Grâce à lui, on peut partir d'une base saine et dépourvu d'artifices et ainsi y appliquer la mise en forme que l'on veut grâce aux feuilles de style (CSS). La séparation des commentaires humains, des tracbacks est alors fluide et parfaitement gérable.
Voici le code récupéré :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | <?php // Do not delete these lines if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) die ('Merci de ne pas lancer cette page directement.'); if (!empty($post->post_password)) { // if there's a password if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie ?> <p class="nocomments">Cet article est protégé par un mot de passe. Entrez ce mot de passe pour voir les commentaires.</p> <?php return; } } function comments_human_number( $zero = false, $one = false, $more = false, $deprecated = '', $number = 0 ) { if ( $number > 1 ) $output = str_replace('%', $number, ( false === $more ) ? __('% Comments') : $more); elseif ( $number == 0 ) $output = ( false === $zero ) ? __('No Comments') : $zero; else // must be one $output = ( false === $one ) ? __('1 Comment') : $one; echo apply_filters('comments_number', $output, $number); } function comments_trackback_number( $zero = false, $one = false, $more = false, $deprecated = '', $number = 0 ) { if ( $number > 1 ) $output = str_replace('%', $number, ( false === $more ) ? __('% trackbacks') : $more); elseif ( $number == 0 ) $output = ( false === $zero ) ? __('No trackback') : $zero; else // must be one $output = ( false === $one ) ? __('1 trackback') : $one; echo apply_filters('comments_number', $output, $number); } /* This variable is for alternating comment background */ $oddcomment = 'class="alt" '; ?> <!-- You can start editing here. --> <?php if ($comments) : ?> <?php $trackbacks_counter = $comments_human_counter = 0; foreach ( (array) $comments as $comment ) : $type = get_comment_type(); if ( $type != 'comment' ) { $trackbacks[] = $comment; $trackbacks_counter++; } else { $comments_human[] = $comment; $comments_human_counter++; } endforeach; ?> <h3 id="comments"><?php comments_human_number('Aucun commentaire', 'Un commentaire', '% commentaires', '', $comments_human_counter );?> pour “<?php the_title(); ?>”</h3> <ol class="commentlist"> <?php foreach ( (array) $comments_human as $comment ) : ?> <li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>"> <cite><?php comment_author_link() ?></cite> dit : <?php if ($comment->comment_approved == '0') : ?> <em>Votre commentaire est en attente de modération.</em> <?php endif; ?> <br /> <small class="commentmetadata"><a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date('j F Y') ?> à <?php comment_time() ?></a> <?php edit_comment_link('Editer','-- ',''); ?></small> <?php comment_text() ?> </li> <?php /* Changes every other comment to a different class */ $oddcomment = ( empty( $oddcomment ) ) ? 'class="alt" ' : ''; ?> <?php endforeach; /* end for each comment */ ?> </ol> <h3 id="trackbacks"><?php comments_trackback_number('Aucun trackback', 'Un trackback', '% trackbacks', '', $trackbacks_counter );?></h3> <ol class="trackbacklist"> <?php foreach ( (array) $trackbacks as $comment ) : ?> <li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>"><?php comment_author_link() ?></li> <?php /* Changes every other comment to a different class */ $oddcomment = ( empty( $oddcomment ) ) ? 'class="alt" ' : ''; ?> <?php endforeach; /* end for each trackback */ ?> </ol> <?php else : // this is displayed if there are no comments so far ?> <?php if ('open' == $post->comment_status) : ?> <!-- If comments are open, but there are no comments. --> <?php else : // comments are closed ?> <!-- If comments are closed. --> <p class="nocomments">Les commentaires sont fermés. </p> <?php endif; ?> <?php endif; ?> <?php if ('open' == $post->comment_status) : ?> <h3 id="respond">Laisser un commentaire </h3> <?php if ( get_option('comment_registration') && !$user_ID ) : ?> <p>Vous devez être <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">connecté</a> pour publier un commentaire.</p> <?php else : ?> <form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> <?php if ( $user_ID ) : ?> <p>Connecté en tant que <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Se déconnecter du site.">Se déconnecter »</a></p> <?php else : ?> <p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" /> <label for="author"><small>Nom <?php if ($req) echo "(obligatoire)"; ?></small></label> </p> <p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" /> <label for="email"><small>Adresse e-mail (ne sera pas publié) <?php if ($req) echo "(obligatoire)"; ?></small></label> </p> <p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" /> <label for="url"><small>Site Web</small></label> </p> <?php endif; ?> <!--<p><small><strong>XHTML:</strong> Vous pouvez utiliser ces tags: <code><?php echo allowed_tags(); ?></code></small></p>--> <p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea></p> <p><input name="submit" type="submit" id="submit" tabindex="5" value="Dites-le !" /> <input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" /> </p> <?php do_action('comment_form', $post->ID); ?> </form> <?php endif; // If registration required and not logged in ?> <?php endif; // if you delete this the sky will fall on your head ?> |
Ensuite, puisque l'on peut embellir un peu les commentaires et créer des repères visuels importants, on peut utiliser des avatars. Concernant le module d'affichage de ces images, je voulais utiliser le système Gravatar, implémenté automatiquement dans WordPress. Quelques plugins permettent aussi cette gestion mais il y a une fonction assez simple à mettre en place, surtout lorsqu'on gère un thème créé de ses propres mains.
J'ai donc trouvé une première explication sur ce blog, ce qui m'a conduit, merci à lui, sur cette magnifique explication de Benoit. Toutefois, le code qu'il propose n'est pas tout à fait le bon et son billet n'a pas été mis à jour. Il faut parcourir les commentaires pour que l'appel de la fonciton fonctionne sans erreur de syntaxe. Cette erreur est due au fait que le script WordPress interprète mal le code. Voici donc le lien vers le code qui fonctionne.
Le voici copier/coller à placer avant l'appel du contenu des commentaires :
1 2 3 4 5 6 7 | <?php if ( !empty( $comment->comment_author_email ) ) { $md5 = md5( $comment->comment_author_email ); $default = urlencode( 'http://use.perl.org/images/pix.gif' ); echo "<img style='float: right; margin-left: 10px;' src='http://www.gravatar.com/avatar.php?gravatar_id=$md5&size=60&default=$default' alt='' />"; } ?> |
Celui-ci propose un style intégré, mais il est facile de l'enlever afin de gérer l'affichage grâce à la feuille de style. Pour la taille de l'avatar, on peut voir que le "size=" est ici à 60. libre à vous de le mettre à la taille que vous voulez.
Il ne reste qu'à activer Gravatar dans les réglages de discussion du panneau d'administration.




