Diseccionando el comments.php de WordPress 2.7

Adaptar los comentarios de un theme a la nueva versión de WordPress puede parecer complicado,  sobretodo porque a partir de la versión 2.7 la estructura es un poco más compleja y diferente.

Sin embargo luego te das cuenta que comments.php es bastante versátil y fácil de entender.threated-comments-wordpress

Pero  si no quieres gastar ese tiempo en estudiar dicho archivo, en Kernel Web te ahorramos el trabajo.

Ya que  a partir de este y otros artículos intentaré hacer una serie de tutoriales para entender, adaptar y ¿por qué no? modificar el comments.php de WordPress.

En este post, las partes comunes del nuevo archivo de comentarios de WP,  puede variar dependiendo el theme.

Previeniendo el acceso directo a comments.php

<?php /* Comentarios anidados, paginados y comentados por Kernel Web! */ ?>
			<div id="comments_wrapper">
<?php // No borres esto, previene el acceso directo al archivo comments.php y checa si un post tiene contraseña
    if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
        die ('Por favor no cargues esta pagina directamente. Gracias!')

Estas líneas  son las que se encargan de la seguridad de nuestro archivo, previenen el acceso directo a comments.php para que si por error alguien intentase acceder directamente se le muestre un mensaje de error.

Si es necesaria una contraseña para ver y comentar

    if ( post_password_required() ) { ?>
         <p class="nocomments">Este post esta protegido, por favor
         introduce tu contraseña o password para verlo.</p>
    <?php
       return;
    }
 ?>

Debido a que WP tiene la opción de proteger posts con contraseña, este snippet es el que se encarga de efectuar la comprobación de si un post tiene esta característica y si es así desplegar el mensaje designado.

Contandolos y mostrando un mensaje para los usuarios

 <?php if ( have_comments() ) : /* Checa si el post tiene comentarios */ ?>
      <h3><?php comments_number('0 comentarios, se el primero en opinar',
      '1 comentario, deja el tuyo', '% comentarios, deja tambien el tuyo');?>
      en &#8220;<?php the_title();?>&#8221;</h3>

Una condicional que detecta si hay comentarios y desplega el número de opiniones vertidas en cada post.

Paginandolos

      <div class="navigation">
          <div class="alignleft"><?php previous_comments_link('« Comentarios Previos') ?></div>
          <div class="alignright"><?php next_comments_link('Comentarios Siguientes »') ?></div>
      </div>

La páginación de comentarios, este código lo pueden poner en varios sitios del fichero, de todas formas su tarea seguirá siendo la misma, paginar los comentarios, el mensaje a mostrar lo pueden personalizar (Comentarios Previos, etc.) .

Listando los comentarios

 <?php /* Una lista de nuestros comentarios que pueden personalizar con la función callback en functions.php */ ?>
      <ol class="commentlist">
      <?php wp_list_comments(); ?>
      </ol>

El nuevo loop para comentarios, practicamente el motor y responsable de que magicamente los comentarios tengan tantas caracteristicas cool, existen varios parametros que se le pueden añadir para modificar la salida de estos al igual que la estructura usando la función Callback.

Mis comentarios están ¿abiertos o cerrados?

<?php else : /* Esto se muestra si todavia no hay comentarios en la entrada */ ?>
    <?php if ('open' == $post->comment_status) : ?>

	<?php else : /* Si los comentarios estan cerrados se mostrara el siguiente mensaje */ ?>
        <p class="nocomments">Los comentarios estan cerrados, disculpa las molestias.</p>
    <?php endif; ?>
<?php endif; ?>

<?php /* Si los comentarios estan abiertos se contruye el formulario para comentar */ ?>
<?php if ('open' == $post->comment_status) : ?>

Un mensaje para cada ocasión

<div id="respond">
<h3><?php comment_form_title( 'Deja tu opinion', 'En respuesta a %s'); ?></h3>

El mensaje del formulario: el primero es que el que se le muestra al usuario por default y el segundo se visualiza cuando se responde a alguien gracias a la función comment_reply_link().

<div id="cancel-comment-reply">
   <small><?php cancel_comment_reply_link(); ?></small>
</div>

El enlace para cancelar la repuesta a un comentario usando replytocom.

<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p class="user_register">Tu debes estar <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo
urlencode(get_permalink()); ?>">registrado</a> para comentar en este post.</p>

Si en tu blog tienes activada la opción de registro para comentar, es el mensaje que se le despliega a alguien que quiera comentar y no esta registrado, personalmente no uso esto, un blog debe ser abierto y para todos :D a que sí.

<?php else : ?>
<form id="commentform" action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post">

<?php if ( $user_ID ) : ?>
<p id="user_conect">Conectado como <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>.
<a href="<?php echo wp_logout_url(get_permalink()); ?>" title="Salir de esta cuenta">Desconectar &raquo;</a></p>

Si un administrador o autor en el blog esta conectado se le muestra el mensaje de arriba si por el contrario el que esta leyendo el blog es un lector se le mostrará lo de abajo:

El Formulario de Comentarios

<?php else : ?>
<p id="comment-notes"><?php _e('Los datos como tu Email <em>nunca</em> seran
publicados ni compartidos con nadie.') ?>
<?php if ($req) _e('Los campos requeridos estan marcados con <span>*</span>') ?></p>

<p><input type="text" name="author" id="author" class="text" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
<label for="author"><small>Nombre <?php if ($req) _e('<span>*</span>') ?></small></label></p>

<p><input type="text" name="email" id="email" class="text" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
<label for="email"><small>Mail <?php if ($req) _e('<span>*</span>') ?></small></label></p>

<p><input type="text" name="url" id="url" class="text" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url"><small>Sitio Web</small></label></p>
<?php endif; ?>

<div class="allowed-tags">
<p><span><?php _e('Puedes usar algo de HTML:') ?></span>
<code><?php echo allowed_tags(); ?></code></p>
</div><!-- .allowed-tags -->

<p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea></p>
<?php do_action('comment_form', $post->ID); /* Hook de WP para añadir campos adicionales u ocultos al formulario */ ?>
<p><input name="submit" type="submit" id="submit" class="button" tabindex="5" value="Envia tu comentario" />
<?php comment_id_fields(); /* Genera los campos ocultos necesarios para comentarios anidados */ ?>
</p>

Si bien algunas funciones ya están comentadas en el snippet, cabe aclarar que en este ejemplo he agregado la lista de tags HTML que pueden usar los usuarios en los comentarios.

Las famosas allowed tags:  <?php echo allowed_tags(); ?> de igual forma si no les gusta pueden desaparecerlas borrando el DIV del mismo nombre de principio a fin.

</form><!-- #commentform -->
<?php endif; /* if ( get_option('comment_registration') && !$user_ID ) */ ?>
</div><!-- #respond -->
<?php endif; /* if ( 'open' == $post->comment_status ) */ ?>
</div><!-- #comments_wrapper -->		

<!-- FIN DE LOS COMENTARIOS, DISFRUTA DE TUS COMENTARIOS ADAPTADOS A WP 2.7 -->

Cerramos condicionales, DIVs y listo!  comentarios actualizados a la nueva versión y 100% validos, que los difruten, si se preguntan por el CSS, lo verán en la siguiente entrada de la serie :P cualquier duda son libres de comentar.

También te puede interesar:

Escrito por Esteban Rojas

Blogger radicado en México, fundador de Kernel Web, autodidacta, fanático de WordPress, por el momento estudiando el bachillerato, luego ya veremos.

Compartelo

  • Tweetea esto
  • Guarda esto en tu Delicious
  • Mandalo a StumbleUpon
  • Suscribete al Feed

6 grandiosos comentarios. Gracias por su opinión.

  1. Que buen trabajo, quedó todo bien explicado :)

  2. Después de este artículo más que ganado un lugar en el blogroll de wp hacks :D
    Saludos!

    • Y eso que no has visto la 2a parte del tutorial :P ya en serio Neri, me has dejado sin palabras, tan sólo me queda decirte muchas gracias!! por darme un lugar en tan grandioso blog como lo es WP Hacks :)

      Saludos

      • Hola, muy buen blog estoy recien comenzado con wordpress y me parece muy bien encontrar informacion en español, dejo un blog para que opinen http://www.fayerwayer.com

  3. Gracias, Thank you..

2 Trackbacks/Pingbacks. Gracias por la Referencia

  1. Por Bitacoras.com el 24 Agosto 2009 a las 19:35
  2. Por Ajustando el CSS de los nuevos comentarios de WordPress 2.7 | Kernel Web el 2 Septiembre 2009 a las 19:10

Anda no seas tímido, añade tu opinión