Codex

Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!

es:Category Templates

Plantillas de Categorías

Introducción

Con el advenimiento de la característica Tema de WordPress, cambiar el aspecto y el sentido de su sitio WordPress nunca fue tan fácil. Este documento explica la relación entre las plantillas de su tema y qué aspecto tiene su página cuando alguien visita una de sus categorías. Si es usted principiante en archivos de plantilla, vea Comenzando con Plantillas.

Usando Plantillas de Categoría

Cuando un visitante hace click en un enlace a una de las categorías de su sitio, el patrón hace una página que cataloga los posts de esa categoría en particular por orden cronológico, desde el post más reciente en la parte superior de la página hasta el más antiguo en la parte inferior. En el tema por defecto, Kubrick, incluido en WordPress 1.5, por ejemplo, todas las páginas de archivo (archivo por meses, por categorías, etc.) listan los posts como extractos. Quizá usted prefiera formatear sus páginas de categorías de forma diferente. Para ello, puede crear plantillas de categorías que indiquen a WordPress como mostrar la información en las páginas de cada categoría.

Qué Plantilla muestra una Determinada Categoría

Primero, necesita conocer la jerarquía de plantilla de las plantillas de categorías. La jerarquía de plantillas determina exactamente qué archivo de plantilla usa WordPress para mostrar una página de categoría.

Suponga que el ID de la categoría en cuestión es 6. WordPress usa el primer archivo de plantilla de la siguiente lista que encuentra en el directorio de su tema en uso.

  1. category-6.php
  2. category.php
  3. archive.php
  4. index.php

Si no tiene un category-6.php, WordPress comprobará si existe un category.php, etcétera.

La modificación más simple que usted puede hacer es hacer parecer diferentes las páginas de categoría de su página principal. Para hacer esto, cree un archivo llamado category.php en el directorio del tema que está usando y controle cómo se muestra la categoría en ese archivo.

Para que una determinada categoría sea mostrada de manera diferente a las demás, incluyendo la página principal, puede crear otro archivo de plantilla llamado category-6.php (donde 6 es el ID de categoría de esa categoría), y WordPress usará esta plantilla en su lugar.

Esta característica de plantillas basadas en preguntas amplía las posibilidades para diseñar categorías, así que use su imaginación.

Ejemplos de Página de Categoría

Lo siguiente es una lista de ejemplos tutoriales para modificar las páginas para sus Categorías. Siéntase libre de hacer adiciones.

Texto Adhesivo en Todas las Páginas de Categoría

Suponga que quiere que se vea algún texto antes de la lista de posts cuando alguien visita cualquiera de sus páginas de categoría (p. ej. usted quiere mostrar el mismo texto para todas las categorías).

Cree en el directorio de su tema un archivo llamado category.php. En realidad, usted podría copiar archive.php o index.php o page.php en esta nueva category.php y así no tiene que escribir tanto código; sólo tendrá que cambiarlo.

Encima del Loop, inserte el código siguiente:

<div id="sticky-snip">
Este es el texto que quiero que aparezca cuando se sigue el enlace a esta categoría.
</div>

Texto Adhesivo Diferente para Cada Página de Categoría

El ejemplo encima es útil, pero supongo que quiere más flexibilidad; usted quiere que se vea un texto diferente sobre la lista de posts de categoría dependiendo de qué categoría se esté visitando. Como ejemplo, supongamos que quiere mostrar:

  • "Estos posts tratan todos sobre el queso." para la categoría "Queso",
  • "No llevo pantalones." para la categoría "Pantalones cortos",
  • y "Lo que sigue es una lista de posts sobre algún tema en concreto." para todas las demás categorías.

Cree category.php como se ha explicado antes. Inserte antes del Loop

<div id="sticky-snip">
Lo siguiente es una lista de posts sobre un tema en concreto.
</div>

Determine el ID de la categoría "Queso". Si es 6. Cree category-6.php como antes. Inserte antes del Loop

<div id="sticky-snip">
Estos posts tratan todos sobre el queso.
</div>

Determine el ID de la categoría "Pantalones cortos". Si es 19. Cree category-19.php como antes. Inserte antes del Loop

<div id="sticky-snip">
No llevo pantalones.
</div>

Texto Adhesivo Solamente en la Primera Página de la Categoría

Si su página de categoría personalizada tiene bastantes posts para generar una página anterior, un link de página anterior aparecerá en la parte inferior de la página. Si pulsa el link para ver más posts dentro de esa categoría, el texto adhesivo aparecerá en cada página secuencial "anterior". Si no quiere ver el texto en las páginas secuenciales, puede usar una etiqueta condicional para comprobar en qué pagina de la serie se encuentra, y si es mayor que la página uno, que ya no se vea el texto adhesivo.

Alrededor de su texto adhesivo, añada lo siguiente:

<!-- Comienza la declaración condicional -->
<?php if ( $paged < 2 ) { // Do stuff specific to first page ?>

<p>Esto es un texto que será visible en la primera página de la página de categoría.</p>

<?php } else { // Do stuff specific to non-first page ?>

<p>Si desea mostrar texto en páginas secuenciales, póngalo aquí.</p>

<?php } ?>
<!-- fin de la declaración condicional -->
<!-- comienza Loop -->
  <?php while (have_posts()) : the_post(); ?>.....

Mostrar Extractos en lugar de Posts Completos

Quizás usted busca reducir el tamaño de sus páginas de categoría. Puede hacerlo mostrando extractos en lugar del contenido entero de cada post. Si examina archive.php del tema "default" incluido en WordPress 1.5, verá como puede hacerse. En resumen, esto puede hacerse creando un category.php como antes, y usando the_excerpt()

<?php the_excerpt(); ?>

en lugar de the_content()

<?php the_content(); ?>

Mostrar Imágenes que Enlacen a Posts Completos

Como antes en WordPress 1.5, usted puede usar el campo de extracto para cambiar la apariencia de páginas de categoría. Coloque una etiqueta img dentro del campo de extracto cuando edita su post. En su plantilla, puede usar the_excerpt_rss() que elimina la etiqueta de párrafo de alrededor del extracto. Incluya esto en un permalink del post.

<a href="<?php the_permalink() ?>"><?php the_excerpt_rss(); ?></a>

Advertencia: usar el extracto de esta forma puede afectar a su feed de RSS, ya que esto coloca una etiqueta img en el extracto, en lugar del texto.

Reemplazar Múltiples Plantillas de Categoría por Una Sola

Usando variables y preguntas WordPress, múltiples archivos de plantilla de categoría pueden ser substituidos por un archivo de plantilla category.php en vez del archivo de la plantilla de categoría individual category-#.php. Lo siguiente son ejemplos de como puede personalizar sus páginas de categoría basadas en una única plantilla de categoría. Solamente está usted limitado por su imaginación y habilidades para la codificación. Esto no es para el tímido, y se recomienda familiaridad con la sintaxis PHP y etiquetas de plantillas WordPress.

Un único archivo de plantilla de categoría (category.php) se puede crear usando la variable global $cat para determinar qué categoría está siendo mostrada, y usando la variable para averiguar la información sobre la categoría en uso, la categoría padre, o las subcategorías.

Para este ejemplo, se recoge la información siguiente:

  • Descripción de Categoría, que está puesta en el panel de administración Gestionar > Categorías.
  • ID y nombre de la categoría, que están puestos en el panel Gestionar > Categorías
  • Categoría padre para las subcategorías
  • El ID de categoría usado dentro de un plugin

En nuestro ejemplo de plantilla personalizada de categoría figura lo siguiente, de forma visible en cada página de categoría:

Texto Personalizado de Página de Categoría

Si usa el campo descripción de categoría en el panel Gestionar > Categorías, sea cual sea la información que introduzca en su descripción de categoría, con o sin etiquetas HTML, aparecerá en cualquier página de categoría que incluya una descripción. Si no desea que el texto personalizado aparezca en las páginas de categoría personalizadas, asegúrese que la información de categoría está en blanco.

Un ejemplo de texto personalizado de página de categoría para la categoría "WordPress" podría ser:

Categoría WordPress

En esta categoría hablamos de cómo usamos WordPress sobre nuestro sitio, ofreciendo consejos y trucos para ayudar a otros usuarios de WordPress a sacar el máximo partido de su sitio en WordPress. ¡Disfrute!

Para crear esto, se ha hecho una petición que dice:

Si es una página de categoría, 
     conseguir el ID de la categoría y el nombre. 
     Añadir algunos filtros a la descripción para determinar la disposición, 
         después mostrar el título de la categoría y la descripción de la categoría.

El código se parece a esto:

<?php if ( is_category() ) : ?>
<h2 id="category-name-header">
<?php echo $cache_categories[$cat]->cat_name ?> Categoría</h2>
<?php add_filter('category_description', 'wpautop'); ?>
<?php add_filter('category_description', 'wptexturize'); ?>
<div id="category-description">
<?php echo category_description(); ?>
</div>
<?php endif; ?>

Recuerde el código de arriba para evitar la redundancia del texto adhesivo en las páginas anteriores. Ahora combine esto con el código para generar el título de categoría y la descripción.

<?php if ( $paged < 2 ) { // Do stuff specific to first page?>
<?php if ( is_category() ) : ?>
<h2 id="category-name-header"><?php echo $cache_categories[$cat]->cat_name ?></h2>
<?php add_filter('category_description', 'wpautop'); ?>
<?php add_filter('category_description', 'wptexturize'); ?>
<div id="category-description">
<?php echo category_description(); ?>
</div>
<?php endif; ?>
<?php } else { // Do stuff specific to non-first page ?>
<?php } ?>

Advertencia

Si decide usar la Descripción de categoría como texto personalizado en sus páginas de categoría, tendrá que examinar TODOS sus archivos de plantilla y cambiar todas las referencias y usar la descripción de categoría en esas etiquetas.

Ejemplos

wp_list_cats 
El uso de <?php wp_list_cats('use_desc_for_title=1'); ?> genera una lista de enlaces a las categorías con la descripción como título. Esta etiqueta de plantilla a menudo se encuentra en los archivos de plantilla de cabecera, barra lateral o pie de página de tu tema. Cambie el 1 a 0 si no quiere esto y el título de enlace se cambiará por "Ver todos los posts archivados bajo nombredelacategoría", donde nombredelacategoría es el nombre de la categoría actual.
list_cats 
Otra versión de wp_list_cats(), puede incluir el empleo de use_desc_for_title. Esta etiqueta de plantilla usa una larga query string of arguments para poner los parámetros. El décimo parámetro cubre la descripción de categoría usada en el enlace. Debe ponerse en FALSE:
<?php list_cats(FALSE, '', 'ID',
    'asc', '', TRUE, FALSE, 
    FALSE, FALSE, FALSE); ?>
category_description() 
Si has usado esta etiqueta de plantilla que explícitamente llama a la descripción de categoría desde un archivo de plantilla, tendrás que quitarlo o cambiarlo, o ser consciente de que esto llamará a la misma descripción de categoría que usas en tus páginas de categoría.

El Menú

El menú de categoría usa dos métodos para recoger la información para los enlaces: un enlace simple para generar un enlace a la categoría padre y empleo de la etiqueta de plantilla wp_list_cats() para generar las subcategorías de la categoría padre.

La lista generada se parecerá a esto:

  • Categoría padre
    • Subcategoría uno
    • Subcategoría dos
      • Sub-subcategoría A
      • Sub-subcategoría B
    • Subcategoría tres

El primer enlace es un enlace estático generado por una petición. Esta petición dice:

  1. Si hay posts, comprobar qué categoría debe ser la primera en verse y llamarla $this_category.
  2. Conseguir el ID de la categoría y el enlace.
  3. Si esta categoría es una categoría padre:
    1. Imprimir el nombre de la categoría y el enlace.
    2. Si es la subcategoría, encontrar la categoría padre e imprimir el nombre de aquella categoría y el enlace.

Un enlace a una página de categoría sin usar permalinks se parece básicamente a esto:

<a href="index.php?cat=8">Categoría ocho</a>

La pregunta sustituirá la llamada a la cat=8 de forma que el enlace genera el enlace a la categoría padre de la categoría mostrada.

El código se coloca en la plantilla después de la cabecera, tras las primeras referencias de estilo para la disposición de la página, y antes del Loop de WordPress. Hemos creado un estilo para la lista y lo hemos llamado cattoc para "category table of contents" como nombre del menú:

<?php if (have_posts()) : ?>
<div id="cattoc"><ul>
<?php $this_category = get_category($cat); ?>
<!-- Si la categoría es padre, listar categoría -->
<?php if ($this_category->category_parent == 0) { ?>
<li>
<a href="<?php echo get_category_link($cat); ?>" title="<?php echo $this_category->cat_name; ?>">
<?php echo $this_category->cat_name; ?>
</a>
<ul>
<?php $this_category->category_parent = $cat; ?>
<?php } else { ?> 
<!-- Si la categoría no es padre, listar la categoría padre -->
<?php $parent_category = get_category($this_category->category_parent); ?>
<li>
<a href="<?php echo get_category_link($parent_category->cat_ID); ?>" title="<?php echo $parent_category->cat_name; ?>">
<?php echo $parent_category->cat_name; ?></a>
<?php } ?>
...
...
<?php endif; ?>

En la segunda parte del menú, necesitamos una lista de las subcategorías bajo la categoría paternal, para mejorar la navegación dentro de las páginas de categoría. La etiqueta de plantilla wp_list_cats() genera automáticamente un listado de las categorías y sus subcategorías, pero necesitamos dar instrucciones a la etiqueta de plantilla para "conseguir las subcategorías de la categoría padre".

<ul>
<?php 
wp_list_cats('list=1&use_desc_for_title=0&child_of=' . $this_category->category_parent); ?>
</ul></li>
</ul></div>

Nota: la etiqueta de plantilla pone específicamente use_desc_for_title en NO (0). Esto hace que la etiqueta NO use la descripción de categoría como "título" del enlace, ya que lo usaremos para el texto personalizado en la página de categoría. La etiqueta de plantilla también puede ser modificada para incluir una clasificación por nombre o ID y para incluir el número de posts. Para más información, ver: wp_list_cats().

Lista Aleatoria de Posts

Si usamos Coffee2Code's Customizable Post Listings Plugin para crear una lista aleatoria de posts de esta categoría, tenemos que configurar la extensión (plugin) para que reconozca a qué categoría pertenecen los posts que deben mostrarse en una lista aleatoria.

El uso normal de la etiqueta de la extensión (plugin) es:

<?php c2c_get_random_posts(number of posts, "<li>%post_URL%</li>", category ID); ?>

O, más específicamente, mostrar 5 posts en una lista de la categoría 8.

<?php c2c_get_random_posts(5, "<li>%post_URL%</li>", 8); ?>

La variable que debemos poner es el ID de la categoría. Reemplazamos esto por una pregunta que recoge el ID de la categoría y lo pone otra vez con la variable $cat:

$wp_query->query_vars['cat']

Ahora metemos esto en una sección llamada "Flashes" para presentar una lista aleatoria de 5 enlaces a posts de la misma categoría que está viéndose.

<h4>Flashes</h4>
<ul>
<?php c2c_get_random_posts( 10, "<li>%post_URL%</li>", $wp_query->query_vars['cat'], $cat); ?>
</ul>

Mostrar los Posts de Categoría

El resto de la página incluye el Loop para mostrar los posts de esta categoría, and the ending if/else statements to close off the various queries we have made on the page. Mientras su Loop puede parecer diferente, aquí está el Loop de nuestro ejemplo de página de categoría personalizada.

<?php while (have_posts()) : the_post(); ?>
<div class="excerpt-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>
<div class="catslist"><?php the_category(' and '); ?></div>
    <div class="entry">
        <?php the_excerpt('Continue Reading...') ?>
    </div>
<!--
<?php trackback_rdf(); ?>
-->
</div>
<?php endwhile; ?>

Después esto sigue con la navegación de páginas y las llamadas a los archivos de plantilla de la barra lateral y pie de página.

La Plantilla de Categoría Personalizada

Use todo esto que ha aprendido para verlo en acción, cree una plantilla category.php para generar información personalizada para cada categoría de su sitio.

[NOTA: Esta plantilla necesita tener instalado y activo el plugin Coffee2Code Customizable Post Listings.]

<div id="content">
   <?php if (have_posts()) : ?>
<div id="cattoc">
   <ul>
   <?php $this_category = get_category($cat);?>
    <?php if ($this_category->category_parent == 0) { ?>
      <li>
<a href="<?php echo get_category_link($cat); ?>" title="<?php echo $this_category->cat_name; ?>">
<?php echo $this_category->cat_name; ?></a>
   <ul>
     <?php $this_category->category_parent = $cat; ?>
<?php } else { ?>
     <?php $parent_category = get_category($this_category->category_parent); ?>
      <li>
<a href="<?php echo get_category_link($parent_category->cat_ID); ?>" title="<?php echo $parent_category->cat_name; ?>">
<?php echo $parent_category->cat_name; ?></a>
     <ul>
<?php } ?>
  <?php wp_list_cats('sort_column=name&optioncount=0&list=1&use_desc_for_title=0&child_of=' .$this_category->category_parent); ?>
     </ul></li>
</ul></div>
<?php if ( $paged < 2 ) { // Do stuff specific to first page?>
   <?php if ( is_category() ) : ?>
     <h2 id="category-name-header"><?php echo $cache_categories[$cat]->cat_name ?></h2>
       <?php add_filter('category_description', 'wpautop'); ?>
       <?php add_filter('category_description', 'wptexturize'); ?>
  <div id="category-description">
    <?php echo category_description(); ?>
  </div>
<?php endif; ?>
<h4>Article Highlights</h4>
   <ul>
<?php c2c_get_random_posts( 10, "<li>%post_URL%</li>", $wp_query->query_vars['cat'], $cat); ?>
   </ul>
<?php } else { // Do stuff specific to non-first page ?>
   <?php } ?>
<?php while (have_posts()) : the_post(); ?>
   <div class="excerpt-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>
   <div class="catslist"><?php the_category(' and '); ?></div>
    <div class="entry">
        <?php the_excerpt('Continue Reading...') ?>
    </div>
<!--
<?php trackback_rdf(); ?>
-->
   </div>
<?php endwhile; ?>
<?php endif; ?>

Esto es solamente un ejemplo y un buen principio. Use su imaginación, PHP y habilidades de pregunta de WordPress para ayudarle a crear su propio archivo de plantilla de categoría personalizable.

Recursos

Este artículo está marcado como en necesidad de ser corregido o editado. Puedes ayudar al Codex editándolo.