Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Personalizando la lista de comentarios de WordPress: callback en wp_list_comments

Imago voragine.net

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

    • Por Jevus •

    No funciona este código, segui participando amigo

  1. 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.

Dejar un comentario

*
*

 

No hay trackbacks