Contenido

El Loop de WordPress en acción

15 feb

+ 25

Bueno, ya explicamos hace unos días como montar un theme para wordpress, y dejamos un par de temas en el aire. Sobre todo lo referente a Loop, el proceso que se encarga de mostrar los posts por pantalla, y puesto que estamos hablando de un blog… sino hay posts no es un blog (se vé que sin comentarios si lo puede ser, pero sin posts… seguro que no).

Bueno el Loop, simplemente es una llamada recursiva que se encarga de recorrer el número de posts de los que disponemos en nuestra base de datos y los muestra según los criterios que nosotros le digamos, su funcionalidad es compleja pero su utilización es facil de narices.

El código.

Voy a intentar comprimir el código lo máximo posible para hacer el post lo más pequeño posible ya que luego me salen posts gigante que no quiere leer nadie.

<?php
get_header();
if (have_posts()) :
   while (have_posts()) :
      the_post();
      the_content();
   endwhile;
endif;
get_sidebar();
get_footer();
?>

En este código vemos el famoso Loop en negrita, realmente son 4 lineas, pero tienen mucha fuerza. Vamos a destripar un poco más el código.

Primero podemos ver dos funciones que le dan toda la vida al Loop.

<?php if (have_posts()) : ?><br />
<?php while (have_posts()) : the_post(); ?>

Esta lineas (para los que conocen algo el lenguaje de programación PHP, verán que esto es una chorrada, que se vayan a otro blog a leer cosas interensantes) son las encargadas de comprobar que haya posts y si hay posts los recorremos. La función have_posts(), se encarga de devolvernos los posts que nosotros estamos filtrando al pasar por el index, un proceso oscuro y siniestro que seguro más de uno no estaría preparado para ello (yo entre ellos).

have_posts(), se encarga de diferenciar los posts que están en draft y los que están en publish. Además se encarga de diferenciar si los posts están comprendidos entre las fechas que nosotros buscamos, categorías o demás criterios que podamos desear buscar.

Con el while hacemos que los recorra mientras encuentre posts, realmente el proceso de los objetos que crea para realizar dicho recorrido me parecen muy complicados para explicar el funcionamiento del Loop y no sirve de nada para ponerlo en funcionamiento, la mágia de POO.

Con the_post(), cargamos en memoria todos datos del post actual. Y despues de él todas las llamadas que necesitemos para mostrar los datos del post se referirán al post actual, esto nos permite montar construcciones curiosas para nuestros templates.

Una idea simple y sin originalidad ninguna sería montar el que tenemos en el Kubrick :D, pero nos sirve para mostrar el funcionamiento.

<h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink() ?>" rel="bookmark"
title="Permanent Link to <?php the_title(); ?>">
<?php the_title(); ?></a></h2>
<small><?php the_time('F jS, Y') ?> by <?php the_author() ?></small>

De esta forma montamos nuestro primer Loop con un aspecto más cutre que jamás hayais visto, pero menos da una piedra… :D

Vamos a acabar nuestro Loop, para ello tendrémos que cerrar las etiquetas anteriores.

<?php endwhile; ?>

Con este tag cerraremos el while que nos recorría los posts que ibamos a mostrar, ahora solo nos falta un sistema bonito, distintivo y que llame la atención para poder movernos por las diferentes páginas con sus respectivos Loops.

<div class="navigation">
	<div class="alignleft">
	<?php posts_nav_link('','','&laquo; Entradas anteriores') ?>
</div>
<div class="alignright">
	<?php posts_nav_link('','Entradas siguientes &raquo;','') ?>
	</div>
</div>

Ahora con nuestro super bonito Loop armado tenemos que pensar que puede darse el caso en que no haya posts que mostrar, entonces tendremos que contemplar esta posibilidad con el siguiente código.

<?php else : ?>
	 <h2 class="center">No se ha encontrado</h2>
	 <p class="center">
	<?php _e("Lo siento, no he encontrado nada"); ?></p>

Ahora si que ya tenemos bien armado nuestro Loop, solo necesitamos cerrarlo (principalmente por que sino lo hacemos petará y no veremos más que un error php), y para ello:

<?php endif; ?>

Si has seguido los pasos ahora tendrás un fichero parecido a este (quizas ne castellano):

<?php get_header(); ?>
 <div id="content" class="narrowcolumn">

  <?php if (have_posts()) : ?>
   <?php while (have_posts()) : the_post(); ?>
     <div class="post">
	     <h2 id="post-<?php the_ID(); ?>">
	     <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
<?php the_title(); ?></a></h2>
	     <small><?php the_time('F jS, Y') ?> by <?php the_author() ?></small>
      </div>
    <?php endwhile; ?>
    <div class="navigation">
	<div class="alignleft">
		<?php posts_nav_link('','','&laquo; Previous Entries') ?>
	</div>
	<div class="alignright">
		<?php posts_nav_link('','Next Entries &raquo;','') ?>
	</div>
    </div>
<?php else : ?>
  <h2 class="center">Not Found</h2>
	<p class="center">
		<?php _e("Sorry,..."); ?>
	</p>
  <?php endif; ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Pues ya está con esto puedes empezar a ir montando tu propio Loop y darle formato a todos aquellos conocimientos que intenté haceros llegar. Tambien podeis echarle un vistazo al codex de WordPress y si entendeis algo (no por el idioma sino por que es un poco lioso) podreis encontrar cosas muy curiosas.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.