Antes de la versión 2.7 de WordPress la lista de comentarios se generaba con loop que recorría la array $comments
mediante un foreach
, de manera que se podía especificar el código a generar para cada comentario. A partir de dicha versión, se introdujo la función wp_list_comments
, que genera ella solita la lista de comentarios, con unos valores por omisión que pueden no convenirnos. Para cambiarlos, wp_list_comments
dispone del parámetro callback
, que permite llamar a una segunda función que defina un código personalizado.
Además wp_list_comments
ofrece la posibilidad de devolver todos los comentarios, solo los «humanos» o solo los pings, especificando el valor correcto con el parámetro type
.
Podemos personalizar también distintos mensajes que se incluyen en la lista, como por ejemplo el texto del enlace para responder a un comentario.
El siguiente código devuelve una lista de comentarios tipo lista ol
conteniendo únicamente los «humanos» (excluyendo los pings), define algunos mensajes personalizados y hace una llamada mediante callback
a la función custom_comment
que define la estructura de la lista:
// human comments list wp_list_comments( array( 'style' => 'ol', 'type' => 'comment', 'reply_text' => 'responder a este comentario', 'login_text' => 'iniciar sesión para comentar', 'callback' => 'custom_comment' ) );
En este caso, la función al especificar la opción style=ol
, debemos envolverla en un contenedor homónimo:
<ol id="comments-list"> <?php wp_list_comments(); ?> </ol><!-- end #comments-list -->
La función custom_comment
debemos alojarla en el archivo functions.php
de nuestro theme y debe tener una estructura parecida al siguiente ejemplo:
// comprobamos que la función existe if ( ! function_exists( 'custom_comment' ) ) : function custom_comment( $comment, $args, $depth ) { $GLOBALS['comment'] = $comment; // en el caso de que el comentario no sea humano switch ( $comment->comment_type ) : case 'pingback' : case 'trackback' : // código HTML para pings... break; // en el caso de que el comentario sea humano default : // si el comentario está pendiente de aprobación if ($comment->comment_approved == '0') { // mensaje y código HTML para comentarios pendientes de aprobación // "Tu comentario debe ser aprobado por un editor antes de publicarse." // o algo así // si el comentario está aprobado } else { // código HTML para cada comentario // incluir la comment_reply_link() para habilitar la respuesta a un comentario: // comment_reply_link( array_merge( $args, array( 'reply_text' => 'Responder a este comentario', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); } // end if comment is approved break; endswitch; } // end function custom_comment endif; // end comprobación custom_comment()
Esta función diferencia la manera en la que se generan los comentarios humanos de los pingbacks y trackbacks. Si llamamos a la función wp_list_comments
dos veces en nuestro archivo comments.php
podemos separar los comentarios humanos de los pings:
// human comments list wp_list_comments( array( 'style' => 'ol', 'type' => 'comment', 'reply_text' => 'responder a este comentario', 'login_text' => 'iniciar sesión para comentar', 'callback' => 'custom_comment' ) ); // pings list wp_list_comments( array( 'style' => 'ul', 'type' => 'pings', 'callback' => 'custom_comment' ) );
En el Codex de WordPress podemos encontrar todos los detalles de cómo personalizar el uso de wp_list_comments
.
Para saber cómo usar wp_list_comments
se puede consultar la entrada de este blog Entendiendo el sistema de comentarios en WordPress: wp_list_comments y comment_form.
2 comentarios
No funciona este código, segui participando amigo
obviously like your website however you have to take a look at the
spelling on quite a few of your posts. Several of them
are rife with spelling issues and I to find it very bothersome to
tell the reality however I will surely come again again.