Mostrando distintos single.php (páginas de artículo) según la categoría

Imaginemos que queremos mostrar, según la categoría a la que un artículo pertenezca, un template distinto; de modo que, por ejemplo, los artículos clasificados en “Cine” tendrían una maquetación distinta de los clasificados en “Música”, ya sea en su barra lateral, en su forma general o en las funcionalidades extra (campos personalizados, scripts, etc) que le quisiéramos dar.

Abriremos nuestro actual single.php, seleccionaremos todo y cortaremos.

Acto seguido, creando un nuevo archivo con nuestro editor de texto (por ejemplo single-1.php), pegaremos lo que habíamos cortado.

Crearemos entonces otro archivo (single-2.php, por ejemplo), que será el que recibirá modificaciones especiales . Pegaremos el código del single.php original de nuevo y lo modificaremos según necesitemos.

Podemos, si es el caso, crear tantos nuevos single-X.php como queramos.

En nuestro ejemplo vamos a usar hasta tres nuevos templates, primero para dos categorías “destacadas” y un tercero para todas las demás.

En nuestro antiguo single.php, ahora vacío, podremos pegar el siguiente código. Nos traerá la versión “1” para cierta categoría, “2” para una segunda o la versión “3” para el resto de categorías:

<?php
	if (in_category(1)) { // Si el post pertenece a la cat 1, redirigir a single-1.php
	include(TEMPLATEPATH . '/single1.php');
	} elseif (in_category(2)) { // Si el post pertenece a la cat 2, redirigir a single-2.php
	include(TEMPLATEPATH . '/single2.php');
	} else { // Si el post pertenece a la cat 3, redirigir a single-3.php
	include(TEMPLATEPATH . '/single3.php');
	} ?>

Salvamos y cerramos.

Esperamos que este post haya sido de vuestra utilidad.

Comentarios
  1. Gracias! Justo lo que necesitaba!

    Escrito el22/03/2010
  2. luchosar

    Excelente, me gusto!!!!!
    Dos cositas:
    – El codigo que debo pegar en el single, en que parte lo hago? al principio de todo?

    – Ahora seria muy bueno un tutorial de como alterar un single para quedar listos!

    Gracias pr el dato.

    Escrito el22/03/2010
  3. Gracias chicos por los comentarios. @luchosar, single.php tiene que quedar vacío antes de que le pastees el código (sólo tiene que haber ése código en single.php).

    WordPress trata de forma especial a single.php, de modo que no puedes cambiarle el nombre, pero sí puedes ponerle el código que quieras en su interior.

    En este caso, ponemos un código que dice “tráeme el template ‘cine.php’ si el artículo que tengo que mostrar es de ésa categoría, o tráeme música.php si esta en música, PERO tráeme un tercer template si el artículo es de cualquier otra categoría”, las modificaciones de diseño las tendrás que hacer en cine.php, musica.php, deportes.php, normal.php, etc, que se basarían todos en el ORIGINAL single.php de tu tema (ahora medio vacío, pero que tienes que haber guardado en algún lugar para usarlo como modelo en tus alteraciones).

    Me apunto lo del tuto para poner un ejemplo de alteración :)

    Escrito el22/03/2010
  4. luchosar

    mmm….me inquieta algo…para el single alterado, (el que da la orden que single mostrar) hay que decirle cuales son la categorias que mostrara…ok…Pero cuando se crea una nueva categoria, hay que (obligatoriamente) ingresar al single y agregar esta categoria cierto?

    Escrito el22/03/2010
  5. luchosar

    esto es lo que no me queda claro, no veo el script que llama a cualquier categoria : PERO tráeme un tercer template si el artículo es de cualquier otra categoría

    Escrito el22/03/2010
  6. Sí, tienes que especificar qué categorías tendrán template especial. El “elseif” con el que concluye el código, sirve para enviar un template ‘por defecto’, para todas la demás categorías que no hayas expresamente anotado.

    Escrito el22/03/2010
  7. Tremendo. Gracias y un saludo.

    Escrito el22/03/2010
  8. Bob

    Saludos Ignacio, quisiera saber si de manera similar a esto se puede hacer algo con las paginas en lugar de solo con los posts. Gracias y espero puedas responderme.

    Escrito el23/03/2010
  9. Hola Bob, para las páginas estáticas, tienes la opción de crear directamente un template o varios, y luego asignarlos en el panel de edición como más te interese.

    Para crear templates utilizables en páginas, tienes que crear el archivo, por ejemplo pagina-especial.php, y pastear:

    /* Template Name: Mi Página Especial */

    , que tiene que estar entre las declaraciones de apertura y cierre de PHP. (Ya haré un artículo sobre ello).

    Luego, el resto del código puede estar inspirado en page.php.

    El template se hará disponible para ser seleccionado en el panel de edición de Páginas.

    Escrito el24/03/2010
  10. Excelente !! Lo he probado y ha quedado de lujo, justo lo que buscaba, Muchas gracias (Y)

    Escrito el08/04/2011
  11. Hola, he creado single4.php,single5.php…y al listarlo en single.php se me repite el post.
    Si alguien sabe como poner mas de tres categorias por favor que me muestre como poner el codigo.
    Muchas gracias

    Escrito el22/09/2011
  12. I’ve just been promoted to Level 162 in #MobsterWorld. Beat me in the game! http://t.co/DL3UwuhH

    Escrito el30/10/2011
  13. Jiménez78

    Tengo una duda…

    Tengo un template X para un single.php de la categoria música. (single-musica.php, por ejemplo)

    Tengo un template Y para un single.php de la categoría instrumentos. (single-instrumentos.php, por ejemplo)

    Si publicamos un post en ambas categorías… ¿Qué color cogerá el single.php del post? ¿Es posible definirlo según dónde halla sido clickado (en una u otra categoría)? ¿O se ve el single.php por defecto?

    Un saludo

    Escrito el03/06/2012
  14. É exatamente isso que procurava.
    Só uma nota: Percebi ao logo da programação que não é bom usar include, recomenda-se usar get_template_part.

    Escrito el13/08/2012
  15. SUPER MAIK

    Brother tu post es la onda
    Muchas gracias por tu aporte!!!
    Me sirvio a la perfeccion mil Gracias.

    Tendras algun blog donde te podamos seguir??

    Escrito el08/10/2012
  16. alan

    Hola!! muchisimas gracias, lo probe y funciono perfecto, ahora tengo una duda… este tuto es del 2010 si no me equivoco, a la fecha de hoy 2014 funciona… crees que algun dia pueda llegar a fallar en algo eso y se pueda joder todo ?

    espero haberme explicado bien :) gracias de nuevo

    Escrito el04/06/2014

DEJA TU COMENTARIO