Mémos

M é m o - l a b .

Les commentaires

WordPress permet d’intégrer facilement la gestion de commentaires liés à des articles ou à des cpt.

Notions abordées : comments_template(), have_comments(), get_comments_number(), wp_list_comments(), comment_form(), comments_open(), comment_form_default_fields().

Bien que non nécessaire, il est possible d’intégrer le code php relatif à la gestion des commentaires dans un template dédié qui sera appelé à l’aide de la fonction comments_template(). Cette fonction prend en argument le lien vers ce template. Si aucun argument n’est renseigné, le template sera le fichier comments.php situé à la racine du thème.

Le réglage des commentaires (notifications, autorisations, validation des commentaires, mots bannis, avatars, commentaires imbriqués …) s’administre depuis le menu Réglages > Discussion.

La compréhension par le code





Depuis le template affichant un article, appel du template
gérant les commentaires
<?php
if (comments_open()){
    // Aucun argument dans la fonction, le template appelé 
    // sera donc comments.php
    comments_template();
}
?>


Template comments.php
<?php if (have_comments()) {; ?>
    <!-- Affiche le nombre de commentaires -->
    <p>Nombre de commentaires : <?php get_comments_number(); ?>
    
    <!-- Affiche les commentaires sous forme de liste -->
    <?php wp_list_comments(); ?>

    <!-- Affiche le formulaire permettant de laisser un commentaire -->
    <?php comment_form(); ?>
<?php } else {; ?>
    <p>Pas de commentaires pour le moment.</p>
<?php }; ?>

Personnaliser la liste des commentaires :

Focus sur la fonction wp_list_comments() . Cette fonction permet, par le biais de paramètres, de personnaliser la liste affichant les commentaires. Retrouvez l’ensemble des paramètres ici.
Exemple : dans le code ci-dessous, le nombre de commentaires par page est restreint à 5 et la taille de l’avatar est fixée à 64px*64px.





<?php 
    wp_list_comments([
        // Le nombre de commentaires par page est restreint à 5
	'per_page' => 5,
        // La taille de l'avatar est fixée à 64px*64px
	'avatar_size' => 64,
    ]); 
?>

Focus sur les paramètres callback et walker : ils vont nous servir à construire notre propre template pour afficher la liste des commentaires.
Cas de l’utilisation de callback : ce paramètre permet d’appeler notre propre fonction placée dans le fichier functions.php.
Cas de l’utilisation de walker : ce paramètre permet de définir une instance de classe. Dans notre exemple, cette classe est appelée MyTheme_Comment_Walker et hérite de la classe Walker-Comment.

La classe walker-comment se trouve dans le fichier wp_include > class-walker-comment.php, elle hérite elle même de Walker et nous sert de modèle pour créer notre propre affichage.





Utilisation du paramètre callback

Fichier comments.php
<?php 
wp_list_comments([
    'per_page' => 5,
    'avatar_size' => 64,
    'callback' => 'mytheme_custom_comments_list'
]); 
?>


Fichier functions.php
<?php 
function mytheme_custom_comments_list($comment, $args, $depth) {
    // Affichage de l'avatar
    echo get_avatar( $comment, $args['avatar_size']);
    // Affichage de la date et l'heure de création du commentaire
    printf(__(' Le %1$s à %2$s, '), get_comment_date('', $comment), get_comment_time());
    // Affichage de l'aauteur du commentaire
    printf(__('%s <span class="says">a dit :</span>'), get_comment_author_link($comment));
    // Affichage du commentaire
    comment_text();
}
?>




Utilisation du paramètre walker

Fichier comments.php
<?php include 'mytheme-class-walker-comment.php'; ?>
<?php 
    wp_list_comments([
	'per_page' => 5,
	'avatar_size' => 64,
	'walker' => new MyTheme_Comment_Walker
    ]); 
?>


Fichier mytheme-class-walker-comment.php à la racine du thème
<?php
class MyTheme_Comment_Walker extends Walker_Comment
{
	protected function comment( $comment, $depth, $args) {
		echo get_avatar( $comment, $args['avatar_size']);
		printf(__(' Le %1$s à %2$s, '), get_comment_date('', $comment), get_comment_time());
		printf(__('%s <span class="says">a dit :</span>'), get_comment_author_link($comment));
		comment_text();
	}
}

Personnaliser le formulaire de commentaires :

Focus sur la fonction comment_form() : Cette fonction permet, par le biais de paramètres, de personnaliser le formulaire de commentaires. Retrouvez l’ensemble des paramètres ici et le code source par défaut ici qui nous sert de modèle.
Dans l’exemple ci-dessous, la classe form-control de bootstrap est ajoutée aux champs author et commentaire. Le titre par défaut « Laisser un commentaire » est remplacé par « Vous pouvez laisser un commentaire ».

La compréhension par le code





<?php 
comment_form([
    'fields' => [
        'author' => sprintf(
	    '<p class="comment-form-author">%s %s</p>',
	    sprintf(
	        '<label for="author">%s%s</label>',
	        __( 'Name' ),
	        ( $req ? ' <span class="required">*</span>' : '' )
	    ),
	    sprintf(
                // Ajout de la classe form-control bootstrap
	        '<input class="form-control" id="author" name="author" type="text" value="%s" size="30" maxlength="245"%s />',
	        esc_attr( $commenter['comment_author'] ),
	        $html_req
	    )
	),
    ],
    'comment_field' => sprintf(
        '<p class="comment-form-comment">%s %s</p>',
	sprintf(
	    '<label for="comment">%s</label>',
	    _x( 'Comment', 'noun' )
	),
        // Ajout de la classe form-control bootstrap
        '<textarea class="form-control" id="comment" name="comment" maxlength="65525" required="required"></textarea>'
    ),
    // Définition du titre
    'title_reply' => __( 'Vous pouvez laisser un commentaire' ),
]);
?>

Focus sur le hook comment_form_default_fields : ce hook permet de définir les champs qui ne seront pas affichés.





<?php
function mytheme_manage_comment_form_fields($fields) {
    // Le champ url ne sera pas affiché    
    unset($fields['url']);

    return $fields;
}
add_filter('comment_form_default_fields', 'mytheme_manage_comment_form_fields');
?>