Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Entendiendo el sistema de comentarios en WordPress: wp_list_comments y comment_form

Imago voragine.net

Desde la versión 2.7 de WordPress el sistema de comentarios incorporó varias capacidades nuevas como la posibilidad de responder a un comentario concreto y mostrar los comentarios anidados. Además se simplificó su uso, unificando su funcionamiento en unas cuantas funciones que permiten la más absoluta automatización con solo incluirlas en el código, respetando la posibilidad de personalización total. A continuación vamos a construir un sistema de comentarios básico para WordPress, para complejizarlo y personalizarlo después.

El código relativo a los comentarios se aloja en el archivo comments.php del theme. Básicamente consta de dos partes: la lista de comentarios y el formulario para añadir un comentario. La primera parte se controla con la función wp_list_comments y la segunda con la función comment_form.

Es recomendable acompañar estos dos componentes básicos con una función que habilita la posibilidad de proteger una entrada con contraseña:

if ( isset($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']) )
  die ('Please do not load this page directly. Thanks! / Por favor, no intentes acceder a esta página directamente. Gracias.');

if ( post_password_required() ) :
  echo 'Esta entrada está protegida con contraseña. Introduce la contraseá para leer los comentarios.';

  /* Esto código hace que no se siga ejecutando
     el código para la generación de comentarios,
     que salte para completar la carga de la página
     sin ellos */
  return;
endif;

Para generar la lista de comentarios, WordPress ejecuta un loop similar al de las entradas, que hay que envolver en una sentencia condicional que comprueba si hay comentarios mediante la función have_comments.

El segundo componente básico, el formulario para comentar, debe ir acompañado de una comprobación que garantice que el sistema de comentarios está abierto, de lo contrario no se mostrará. La función comments_open() usada dentro de una sentencia condicional nos lo permite.

Así para generar un sistema básico de comentarios debemos usar las siguientes funciones de WordPress:

  • post_password_required
  • have_comments
  • wp_list_comments
  • comments_open
  • comment_form

El código completo:

if ( isset($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']) )
  die ('Please do not load this page directly. Thanks! / Por favor, no intentes acceder a esta página directamente. Gracias.');

<div id="comments">

  if ( post_password_required() ) :
    echo 'Esta entrada está protegida con contraseña. Introduce la contraseña para leer los comentarios.</div><!-- end #comments -->';

     /* Esto código hace que no se siga ejecutando
     el código para la generación de comentarios,
     que salte para completar la carga de la página
     sin ellos */
    return;
  endif;

  if ( have_comments() ) { // si la entrada tiene comentarios
    wp_list_comments();
  } else { // si la entrada no tiene comentarios
    if ( comments_open() ) { // si los comentarios están abiertos aunque no haya
       echo 'Aún no hay comentarios a esta entrada.';
    } else { // si los comentarios están cerrados
       echo 'Los comentarios están deshabilitados en esta entrada.';
    }
  } // fin if have_comments

</div><!-- end #comments -->

if ( comments_open() ) { // si los comentarios están habilitados
  comment_form();
}

Para que funcione plenamente la función comment_form debemos incluir en el archivo header.php de nuestro theme la siguiente línea, justo antes de la función wp_head:

if ( is_singular() ) wp_enqueue_script( 'comment-reply' );

Esta línea de código habilitará las funciones necesarias para poder contestar directamente a un comentario.

A esta base le podemos añadir algunos funciones más. Por ejemplo, el loop de comentarios también dispone de un sistema de paginación, por el que se puede navegar con las funciones previous_comments_link y next_comments_link:

<?php wp_list_comments(); ?>
<div id="comments-nav">
   <div class="nav-previous"><?php previous_comments_link('Comentarios anteriores'); ?></div>
   <div class="nav-next"><?php next_comments_link('Comentarios'); ?></div>
</div>

Referencias:

7 comentarios

    • Por buen tutorial •

    buen tutorial

    • Por Denis

    Aunque no lo creas me es de tremenda utilidad ya que quiero crear un plugin para mi servicio proveedor captcha.

    1. Hola Denis, me alegro de que mi artículo te sirviera, a pesar de tener ese título tan largo :)

      Un detalle que quiero comentarte con respecto a este tutorial que publicas: cualquier modificación de los archivos que contiene la carpeta wp-includes o los que están en el raíz de la instalación de WordPress se perderá en el momento en que actualices la versión de WordPress.

      Para que esto no ocurra hay que introducir cualquier modificación en la carpeta wp-content. WordPress está diseñado para poder interactuar con él de muchas maneras: puedes introducir cambios en el tema activo en la carpeta themes, puedes crear un plugin y alojarlo en la carpeta plugins…

      Un saludo
      ** Tu página no me deja comentar, me da error.

      1. Ya funcionó.

×

Responder al comentario de buen tutorial

*
*

 

3 trackbacks