jueves, 10 de octubre de 2013

12. La plantilla Archivo

(El artículo original y en inglés, fue publicado el 7 de noviembre de 2012)

ThemeShaper es el sitio del Equipo de Temas de Automattic, que, en junio de 2009, publicó una muy popular serie de 11 artículos de Ian Stewart, bajo el título: How To Create a WordPress Theme: The Ultimate WordPress Theme Tutorial (Como crear un Tema de WordPress: el tutorial definitivo).
El año pasado, reflotó y actualizó ese tutorial. Esta vez con 16 artículos a cargo de Michelle LangstonThe ThemeShaper WordPress Theme Tutorial: 2nd Edition (Tutorial de Temas de WordPress de ThemeShaper. Segunda edición).
Me propongo traducir libremente esas 16 entradas (además de la introducción) e ir publicándolas a medida que las tenga listas.
Al final de cada entrada va el listado con todas las entradas de este tutorial.


Lo que hace archive.php (y todas sus plantillas relacionadas) es mostrar las entradas basándose en un criterio elegido. Un rango de fechas, o entradas de cierto autor, una categoría, o una etiqueta. Así que, básicamente, se parece mucho a  index.php.

Nuestro Tema tendrá una plantilla archive.php multipropósito para cubrir los archivos de fechas, categorías, autores y etiquetas.

Si desea utilizar una plantilla diferente para cada tipo de archivo, entonces puede crear archivos de plantilla diferentes para cada uno, por ejemplo: category.php, author.php, y tag.php. Si WordPress no encuentra un archivo de plantilla específico para cada tipo de archivo, utiliza de forma predeterminada archive.php.

La plantilla Archivo

Aquí tiene lo que nuestra plantilla archivo multipropósito hará:
  1. Llamar a the_post()
  2. Revisar la solicitud para ver a qué tipo de archivo se refiere (por fecha, categoría, autor o etiqueta)
  3. Producir un título apropiado y, si se trata de un archivo por categoría o etiqueta, mostrar la descripción de la categoría o etiqueta (si es que fueron incluidas en el Escritorio de WordPress)
  4. Rebobinar las entradas con rewind_posts()
  5. Hacer las habituales tareas "bucleanas".
Sin más que decir, veamos el código. Abra el arcivo archive.php y agréguele lo siguiente.

<?php
/**
* The template for displaying Archive pages.
*
* Learn more: http://codex.wordpress.org/Template_Hierarchy
*
* @package Shape
* @since Shape 1.0
*/
 
get_header(); ?>
 
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
 
<?php if ( have_posts() ) : ?>
 
<header class="page-header">
    <h1 class="page-title">
        <?php
            if ( is_category() ) {
                printf( __( 'Category Archives: %s', 'shape' ), '<span>' . single_cat_title( '', false ) . '</span>' );
 
            } elseif ( is_tag() ) {
                printf( __( 'Tag Archives: %s', 'shape' ), '<span>' . single_tag_title( '', false ) . '</span>' );
 
            } elseif ( is_author() ) {
                /* Queue the first post, that way we know
                 * what author we're dealing with (if that is the case).
                */
                the_post();
                printf( __( 'Author Archives: %s', 'shape' ), '<span class="vcard"><a class="url fn n" href="' . get_author_posts_url( get_the_author_meta( "ID" ) ) . '" title="' . esc_attr( get_the_author() ) . '" rel="me">' . get_the_author() . '</a></span>' );
                /* Since we called the_post() above, we need to
                 * rewind the loop back to the beginning that way
                 * we can run the loop properly, in full.
                 */
                rewind_posts();
 
            } elseif ( is_day() ) {
                printf( __( 'Daily Archives: %s', 'shape' ), '<span>' . get_the_date() . '</span>' );
 
            } elseif ( is_month() ) {
                printf( __( 'Monthly Archives: %s', 'shape' ), '<span>' . get_the_date( 'F Y' ) . '</span>' );
 
            } elseif ( is_year() ) {
                printf( __( 'Yearly Archives: %s', 'shape' ), '<span>' . get_the_date( 'Y' ) . '</span>' );
 
            } else {
                _e( 'Archives', 'shape' );
 
            }
        ?>
    </h1>
    <?php
        if ( is_category() ) {
            // show an optional category description
            $category_description = category_description();
            if ( ! empty( $category_description ) )
                echo apply_filters( 'category_archive_meta', '<div class="taxonomy-description">' . $category_description . '</div>' );
 
        } elseif ( is_tag() ) {
            // show an optional tag description
            $tag_description = tag_description();
            if ( ! empty( $tag_description ) )
                echo apply_filters( 'tag_archive_meta', '<div class="taxonomy-description">' . $tag_description . '</div>' );
        }
    ?>
</header><!-- .page-header -->
 
<?php shape_content_nav( 'nav-above' ); ?>
 
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
 
    <?php
        /* Include the Post-Format-specific template for the content.
         * If you want to overload this in a child theme then include a file
         * called content-___.php (where ___ is the Post Format name) and that will be used instead.
         */
        get_template_part( 'content', get_post_format() );
    ?>
 
<?php endwhile; ?>
 
<?php shape_content_nav( 'nav-below' ); ?>
 
<?php else : ?>
 
<?php get_template_part( 'no-results', 'archive' ); ?>
 
<?php endif; ?>
 
</div><!-- #content .site-content -->
</section><!-- #primary .content-area -->
 
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Se ve muy familiar, ¿no es así? Estamos reutilizando varias funciones y plantillas de las que hemos discutido en lecciones previas, como shape_content_nav(), content.php y content-aside.php, a la que llamamos en la línea 80; y no-results.php, a la que llamamos en la línea 89.

Los comentarios en el código deberían ayudarlo a tener una idea de qué está haciendo la plantilla archivo, igualmente en las próximas pocas secciones vamos a recorrer algunas de estas cosas “archivadoras”.

Título dinámico de archivo

En el código de arriba, las líneas desde la 19 a la 53 son las responsables de generar el título de nuestra página de archivo. Cómo aparece el título depende de que tipo de archivo estemos viendo. Aquí tenemos el código de nuevo (no tiene que pegar nada, ya que se trata de una copia del código de arriba. Solamente examine y aprenda):

<h1 class="page-title">
<?php
if ( is_category() ) {
    printf( __( 'Category Archives: %s', 'shape' ), '<span>' . single_cat_title( '', false ) . '</span>' );
 
} elseif ( is_tag() ) {
    printf( __( 'Tag Archives: %s', 'shape' ), '<span>' . single_tag_title( '', false ) . '</span>' );
 
} elseif ( is_author() ) {
    /* Queue the first post, that way we know
     * what author we're dealing with (if that is the case).
    */
    the_post();
    printf( __( 'Author Archives: %s', 'shape' ), '<span class="vcard"><a class="url fn n" href="' . get_author_posts_url( get_the_author_meta( "ID" ) ) . '" title="' . esc_attr( get_the_author() ) . '" rel="me">' . get_the_author() . '</a></span>' );
    /* Since we called the_post() above, we need to
     * rewind the loop back to the beginning that way
     * we can run the loop properly, in full.
     */
    rewind_posts();
 
} elseif ( is_day() ) {
    printf( __( 'Daily Archives: %s', 'shape' ), '<span>' . get_the_date() . '</span>' );
 
} elseif ( is_month() ) {
    printf( __( 'Monthly Archives: %s', 'shape' ), '<span>' . get_the_date( 'F Y' ) . '</span>' );
 
} elseif ( is_year() ) {
    printf( __( 'Yearly Archives: %s', 'shape' ), '<span>' . get_the_date( 'Y' ) . '</span>' );
 
} else {
    _e( 'Archives', 'shape' );
 
}
?>
</h1>

Puede ver que el título estará envuelto dentro de una etiqueta <h1>. Qué cae dentro de la etiqueta h1 depende del tipo de archivo.
Si es el archivo de una categoría, el título se verá así:
Archivo de Categoría: [Nombre de la Categoría]
Si estamos lidiando con archivos de etiquetas, obtendremos esto como título:
Archivo de Etiquetas: [Nombre de la Etiqueta]
Para el archivo de un autor, este será nuestro título:
Archivo de Autor: [Nombre del Autor]
Nuestro archivo en base diaria producirá el siguiente título:
Archivos Diarios: [Fecha] (la fecha aparece en el formato que definió en Escritorio > Ajustes > Generales)
Los títulos de los archivos mensuales siguen el siguiente patrón:
Archivos Mensuales: [Setiembre 2013]
Los títulos de los archivos anuales se ven así:
Archivos anuales: 2013
Finalmente, si se trata de un archivo, pero de ninguno de los casos mencionados arriba (ej. no es un archivo de categoría, etiqueta, autor o fecha), entonces, el título es, simplemente:
Archivos

Descripciones de la categoría y las etiquetas

Entonces, nos hemos dedicado al título. Ahora, vea las líneas desde la 54 hasta la 67 de archive.php. Las repito aquí para su comodidad:

<?php
    if ( is_category() ) {
        // show an optional category description
        $category_description = category_description();
        if ( ! empty( $category_description ) )
            echo apply_filters( 'category_archive_meta', '<div class="taxonomy-description">' . $category_description . '</div>' );
 
    } elseif ( is_tag() ) {
        // show an optional tag description
        $tag_description = tag_description();
        if ( ! empty( $tag_description ) )
            echo apply_filters( 'tag_archive_meta', '<div class="taxonomy-description">' . $tag_description . '</div>' );
    }
?>

WordPress le permite ingresar descripciones para categorías y para etiquetas. Esta porción del código revisa cada categoría o etiqueta en busca de una descripción. Si encuentra una, la muestra justo debajo del título (y antes de la primera entrada de la lista de archivo), envuelta en un div con la clase “taxonomy-description”.

Si prefiere no tener esta característica en su Tema, entonces todo lo que tiene que hacer es borrar este bloque de código de archive.php.

Muy bien, eso es todo. El resto de la plantilla de archivo es la misma sustancia que ya hemos visto en index.php y en single.php.


Sumario de entradas

  1. Introducción.
  2. El desarrollo de su "sentido temático".
  3. Herramientas para el desarrollo de Temas de WordPress.
  4. Creación de una estructura html para su Tema de Wordpress.
  5. Plantillas y estructura de directorios de un Tema de WordPress.
  6. Configuración de las funciones de su Tema.
  7. Asegure su Tema de WordPress.
  8. La plantilla cabecera del tema de WordPress: header.php.
  9. La plantilla Index de su Tema de WordPress.
  10. Las plantillas Entrada Individual, Entrada de Adjuntos y error 404 del Tema de WordPress.
  11. La plantilla de comentarios de un Tema de WordPress.
  12. La plantilla de búsqueda (search) y la plantilla página (page) del Tema de WordPress.
  13. La plantilla Archivo.
  14. Las plantillas "sidebar" (barra lateral) y "footer" (pie de página) del Tema de WordPress.
  15. Como resetear y reconstruir los CSS de su Tema de WordPress y definir su diseño.
  16. Fondo y cabecera personalizados.
  17. Distribuir su Tema de WordPress.

No hay comentarios:

Publicar un comentario

Lo que escriba a continuación será revisado antes de publicarse.
Gracias por tus comentarios.