WordPress un ofrece un sistema de comentarios bastante completo. En él ya tiene implementado los autores, paginación, citas y respuestas lo cual ahorra una gran cantidad de trabajo. Sin embargo, es posible que no te guste el formato HTML y quieras cambiarlo o estés diseñando/modificando un tema. En este post trataré de mostrar como cambiar el formato de los comentarios.
En principio hay 2 opciones. Una de ellas es empleando un bucle personalizado que a pesar de tener un mayor control en cuanto formato y diseño tienes que buscar cómo implementar las respuestas y la paginación. La otra opción, y la que explicaré, es empleando el método wp_lists_comments().
Parámetros de wp_list_comments
Se pueden emplear una serie de parámetros para cambiar el diseño de los comentarios
- avatar_size -> El tamaño del avatar/gravatar.
- style -> Qué etiquetas van a envolver los comentarios. Las opciones son div, ol o ul.
- type-> Que tipo de comentarios quieres mostrar. Puedes optar entre all, comment, trackback, pingback o pings. Por defecto es all.
- reply_text -> El texto del enlace que permite contestar un comentario.
- login_text -> El texto cuando se necesita regisrrarse para comentar.
- callback -> La que usaremos y permitirá modificar el formato de los comentarios. Permite especificar el nombre de la función que crea el HTML de la lista de comentarios.
Modificar el formato de los comentarios
Para modificar el formato será preciso editar el archivo comments.php.
1 2 3 |
<ul class="lista-comentarios"> <?php wp_list_comments('type=comment&callback=formato_comentarios');?> </ul> |
Una vez hecho, tenemos que ir a functions.php y crear la función
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 |
function formato_comentarios($comment, $args, $depth) { $GLOBALS['comment'] = $comment; //Obtengo el objeto comentario ?> <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>"> <div id="comment-<?php comment_ID(); ?>"> <!-- Obtengo el gravatar del autor. A mayores imprimo el nombre del autor y enlace a su perfil--> <div class="autor-container"> <?php echo get_avatar($comment,$size='48',$default='<path_to_url>' );?> <?php printf(__('<cite class="fn">%s</cite> <span class="cita">Dice:</span>'), get_comment_author_link()); ?> </div> <!--Si el comentario no está moderado mostrará un mensaje--> <?php if ($comment->comment_approved == '0') : ?> <em><?php _e('Tu comentario está a la espera de moderación.'); ?></em> <?php endif; ?> <!-- Muestro la fecha y la hora a la que se escribió el mensaje. También un enlace con la opción de editar--> <div class="comment-meta commentmetadata"> <a href="<?php echo htmlspecialchars(get_comment_link($comment->comment_ID) )?>"> <?php printf(__('%1$s a las %2$s'), get_comment_date(), get_comment_time()) ?> </a> <?php edit_comment_link(__('(Edit)'),'','') ?> </div> <!--Muestro el contenido del comentario--> <?php comment_text(); ?> <!--Enlace para responder teniendo en cuenta la profundidad o nivel que pueden tener las respuestas--> <div class="reply"> <?php comment_reply_link(array_merge($args, array('depth' => $depth, 'max_depth' => $args['max_depth']))); ?> </div> </div> <?php } |
Te habrás fijado que no se cierra la etiqueta li. WordPress genera automáticamente el cierre del li dependiendo del código generado para los comentarios anidados.
Ahora comments.php llamará a la función para cuando cree el bucle de comentarios usando el output de dicha función.
Bucle de comentarios a la old-school
Si no te gusta que esté tan engorroso hay una manera mucho más sencilla pero las respuestas a los comentarios y paginación no serán posibles sin ningún plugin. En comments.php quita la función wp_lists_comments y escribe el siguiente código.
1 2 3 4 |
<?php foreach ($comments as $comment) : ?> <?php comment_author_link(); ?> <?php comment_text() ?> <?php endforeach; ?> |
Y hasta aquí modificar el formato de los comentarios en WordPress, espero que os sea de ayuda. Buen finde 🙂