Blog
Blog sobre programación y diseño en la web
Cómo separar los artículos por categorías en Wordpress
Translate this page into EnglishRecuerdo que cuando veía periódicos o revistas creados con Wordpress me preguntaba ¿Cómo crearán un menú con los distintos tipos de noticias? y sobre todo ¿Cómo lo harán para tener en una misma página las noticias separadas en función de su tema (deportes, economía, política, etc…) si sólo hay un loop?
Cuando me puse a investigarlo vi que era muy sencillo. Vamos a verlo en detalle:
Cómo crear un navegador con categorías
Tendríamos un menú principal de este tipo, por ejemplo:

de tal manera que al hacer click en una de las opciones vayamos a una página que incluya solamente las noticias de la categoría escogida (por ejemplo, Sociedad).
Lo primero que tendríamos que hacer es crear nuestras categorías en el Administrador de Wordpress. Si abrimos el administrador, para escribir un nuevo artículo haríamos click en Entradas (menú de la izquierda, arriba) y luego en Añadir. Estaríamos entonces en una ventana que se llama Agregar Nueva Entrada. Aquí escribimos nuestro artículo. Como veis en la siguiente imagen, a la derecha tenéis un cuadro que se llama Categorías. Aquí asignáis una (o varias) categorías a vuestro artículo. Si no existiese la categoría correspondiente, la creáis.

También se pueden crear y editar categorías en la opción del menú Entradas/Categorías.
Por lo tanto, al crear un nuevo artículo seleccionamos la categoría en la que queramos encuadrarlo (Nacional, Internacional, Deportes, Política, Sucesos o cualquier otra categoría que hayamos creado).
El navegador de nuestra web, que normalmente suele estar en header.php, suele estar definido de esta forma:
1 | <?php wp_list_pages('&title_li='); ?> |
Así crearemos una lista con tódas las páginas creadas. Pero si lo que queremos son categorías y no páginas lo haríamos de esta forma:
1 | <?php wp_list_categories('&title_li='); ?> |
Pero si queremos mezclar páginas con categorías (por ejemplo la página de Portada seguida de las categorías):
1 2 | <?php wp_list_pages('include=3&title_li='); ?> <?php wp_list_categories('&title_li='); ?> |
Aquí incluimos primero la página que tiene el ID 3 (suponemos que la de Portada. En el administrador de Wordpress eligiríamos esta página como la de apertura del blog), y luego las categorías.
Con esto tendríamos ya nuestro navegador, al que le daríamos los estilos que más nos convengan.
Pero, ¿qué hará Wordpress si hacemos click en el enlace Deportes (por ejemplo)? Buscará en nuestro tema la página correspondiente a esa Categoría donde sólo saldrán las entradas que tengan esa Categoría.
Cada Categoría tiene un ID (o número que la identifica). Si en el menú de la izquierda del Administrador vamos a Entradas/Categorías veremos todas nuestras categorías. Al situar el ratón sobre una categoría se muestra abajo en el navegador el URL de esa categoría con un número al final. Ese es su ID. Ahora supongamos que la categoría “Deportes” tiene un ID=3. Al hacer click sobre “Deportes” en el navegador que hemos creado, Wordpress va a buscar la página category-3.php en la carpeta de nuestro tema.
Es decir, siempre va a buscar primero category-ID.php, donde ID es el ID de la categoría correspondiente. Si no existe el category-ID.php buscará el archivo category.php, y si este no existe buscará archive.php y si (por último) este no existe buscará index.php
Por lo tanto, si quieres hacer que una Categoría cuyo ID=3 sea diferente a las páginas de otras categorías necesitarás crear un category-3.php
Para crearlo es aconsejable copiar el archivo category.php y cambiarlo de nombre para empezar a trabajar desde los contenidos de category.php adaptándolos con los cambios que queramos realizar.
Vamos ahora con nuestro segunda pregunta, cómo conseguir que en una misma página (por ejemplo la portada de un periódico) tengamos distintas noticias en lugares distintos del periódico agrupadas en función de su categoría.
Distintos loops en la misma página diferenciados por categorías
Para crear una portada que incluya noticias de todas las categorías pero ordenadas según su categoría (por ejemplo, por un lado las de Actualidad, por otro las de Sociedad, etc..) no nos vale con el “loop” único que tenemos en Wordpress por defecto. Necesitaremos un “loop” por cada categoría. Como en este ejemplo, de un periódico nacional:

Como vemos las noticias se agrupan en función de su categoría (en este caso Internacional, España, Economía y Cultura).
Si no queremos tener todas las noticias juntas y queremos agruparlas según su categoría y darles un estilo y ubicación diferente en función de dicha categoría necesitaremos crear un “loop” para cada categoría. Esto se consigue sustituyendo el “loop” habitual de Wordpress…
1 2 3 4 5 6 7 8 9 10 | <?php while (have_posts()) : the_post(); ?> <div <?php post_class() ?> id="post-<?php the_ID(); ?>"> <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Enlace a <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> <small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small> <div class="entry"> <?php the_content('Leer el resto de esta noticia »'); ?> </div> <p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?>Publicado en <?php the_category(', ') ?> | <?php edit_post_link('Editar', '', ' | '); ?> <?php comments_popup_link('No hay comentarios »', '1 Comentario »', '% Comentarios »'); ?></p> </div> <?php endwhile; ?> |
… por tantos “loops” como sea necesario, y esto se consigue gracias a WP_Query.
Por ejemplo, si queremos una sección que sólo muestre la categoría “Deportes”, necesitarás haber creado esa categoría previamente en Wordpress así como diversas noticias que pertenezcan a esa categoría.
El código ahora (en vez del anteriormente visto) será ahora:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $deportes = new WP_Query(); $deportes->query('category_name=Deportes&showposts=5'); while($deportes->have_posts()) : $deportes->the_post(); ?> <div class="post"> <h4><?php the_title(); ?></h4> <div class="entry"> <?php the_content('Leer el resto de esta noticia »'); ?> </div> </div> <?php endwhile; ?> |
$deportes es la variable que utilizamos aquí para la sección de Deportes creando una nueva instancia de WP_Query(). Luego aplicamos los parámetros que necesitemos, en este caso que se muestren sólo las entradas cuyo nombre de categoría sea Deportes y que se muestren 5 entradas. El resto es una versión corta del “loop” de wordpress.
Si queremos utilizar el ID de la categoría en vez de su nombre cambiaríamos esta línea (suponiendo que Deportes sea la categoría 3):
1 | $deportes->query('cat=3&showposts=5'); |
¿Que además de Deportes queremos Nacional, Internacional, Economía, etc…? Pues sólo hay que crear un bloque de código como el anterior para cada categoría. ¡Así de sencillo!
Más lecturas recomendadas
Function, habla un poco sobre los “loops” personalizados.
NetPlus tiene un artículo completo sobre como crear un periódico con Wordpress.
WP_Query en la documentación de Wordpress.
Sobre el Loop y WP_Query en el manual de referencia de Wordpress.
WPEngineer.com muestra varios trucos para WP_Query
3 Comentarios a “Cómo separar los artículos por categorías en Wordpress”:
Escribir un comentario
XHTML: Puedes usar estos códigos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">



Muchas gracias!!!, hacia tiempo que buscava como hacer multi post en las paginas secundarias con wordpress .org , mañana en cuanto pueda empiezo con las pruebas y volvere a contar como me fue!!! =) Saludos desde Córdoba Argentina
[...] http://www.emenia.es/como-separar-los-articulos-por-categorias-en-wordpress/ [...]
Excelente post, muy practico y facil de implementar!
Aunque las proximas versiones de Wordpress vendran con manejador de menus aun no esta activo por lo cual este manual demuestra una manera bastante facil de poder editar el menu principal.
Gracias,
Carlos Maquez
http://www.negocioselectronicos.biz