Trabajando en un proyecto personal me encontre ante una situacion particular: necesitar mostrar solo una categoria en la pagina principal de WordPress. “Ok.” , me dije. “Solamente voy a usar wp_query() y tema solucionado, pero no fue tan facil, ya que por alguna razón usando wp_query() no funcionaba la paginación.

La funcion de paginacion esta definida en el archivo link-template dentro de la carpeta wp-includes. La mayoria de los temas de WordPress tienen incluida una paginacion basada en las funciones previous_posts_link() y next_posts_link(), estas funciones utilizan una variable global llamada, misteriosamente ;) , wp_query que no es mas ni menos que una instancia de WP_query(). Y he aqui el problema: cuando llamamos a nuestra propia instancia de la funcion WP_query(), no contamos con esta variable global lo cual va a hacer que la paginacion de los posts de WordPress no funcione.

Ejemplo: supongamos que queremos mostrar solo la categoria 3.

<h3>Articulos de la Categoria 3</h3>
<ul>
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('cat=3'.'&paged='.$paged);
?>

Como pueden ver en la linea 4, asignamos la variable global wp_query a una variable temporal llamada temp (para mantener una referencia). Luego, en la linea 5 podemos ver que asignamos el valor null (que no es lo mismo que un cero, que si es un valor), a la variable global wp_query. Instanciamos a WP_query() y luego hacemos un


$wp_query->query('cat=3'.'&paged='.$paged);

Es de destacarse la parte de “‘&paged=’.$paged” , luego llamamos a las funciones previous_posts_link() y next_posts_link() como siempre para finalmente volver la variable wp_query a su estado original usando el valor $temp que habiamos asignado previamente.

<?php $wp_query = null; $wp_query = $temp;?>

Aqui les dejo un codigo completo:

<h3>Articulos de la Categoria 3</h3>
<ul>
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('cat=3'.'&paged='.$paged);
?>
<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
	<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<div>
  <div><?php previous_posts_link('&laquo; Anterior') ?></div>
  <div><?php next_posts_link('Siguiente &raquo;') ?></div>
</div>
<?php $wp_query = null; $wp_query = $temp;?>

Espero que este ejemplo les haya servido y hayan podido solucionar este problema que se presenta con la paginacion al usar la funcion WP_query() de forma personalizada.