Por defecto, WordPress crea archivos que listan todas tus entradas en orden inverso. Si los usuarios están buscando entradas pertenecientes a una cierta categoría o con un término de taxonomía concreto, tendrán que visitar la página de archivo de dicha categoría o término.
Pero, ¿y si deseases hacer la página de archivo principal de un tipo de entrada personalizada más útil y fácil de usar para el usuario? En este tutorial te mostraré cómo crear una página de archivo para un tipo de entrada personalizada que muestre únicamente las entradas de ese tipo y categorizadas según una taxonomía, de manera que en lugar de listar un largo listado, los usuarios verán una lista para cada término de taxonomía.
Lo que vas a necesitar
Para seguir este tutorial necesitarás una instalación de WordPress para el desarrollo y un editor de código. Crearás un tema hijo para el tema twentyfourteen, así tendrás que tener instalado éste último (debería estarlo por defecto).
Te voy a enseñar como crear un tema hijo, pero si te bloqueas, echa un vistazo a la hoja de estilo que viene con el paquete de ejemplos de código para este tutorial.
1. Comienzo: Registrar el tipo de entrada y la taxonomía
Según mi experiencia, esta técnica se necesita con mayor frecuencia para crear tipos de entradas personalizadas y taxonomías que para entradas, categorías o etiquetas estándar, así que empezaré registrando un tipo de entrada y una taxonomía.
Nota: Yo estoy usando el mismo tipo de entrada ‘animal’ que registré en un tutorial anterior sobre cómo crear un archivo basado en imágenes. Si quieres llevar las cosas un poco más allá, podrías combinar la técnica de ese tutorial con la que te estoy mostrando aquí y mostrar la lista de tu término de taxonomía acompañado de imágenes.
En el archivo functions.php de tu tema, añade el siguiente código para registrar el tipo de entrada:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// register a custom post type called 'animals' function wptp_create_post_type() { $labels = array( 'name' => __( 'Animals' ), 'singular_name' => __( 'animal' ), 'add_new' => __( 'New animal' ), 'add_new_item' => __( 'Add New animal' ), 'edit_item' => __( 'Edit animal' ), 'new_item' => __( 'New animal' ), 'view_item' => __( 'View animal' ), 'search_items' => __( 'Search animals' ), 'not_found' => __( 'No animals Found' ), 'not_found_in_trash' => __( 'No animals found in Trash' ), ); $args = array( 'labels' => $labels, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail', 'page-attributes' ), 'taxonomies' => array( 'post_tag', 'category'), ); register_post_type( 'animal', $args ); } add_action( 'init', 'wptp_create_post_type' ); |
Después, añade el código que registra la taxonomía:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// register a taxonomy called 'Animal Family' function wptp_register_taxonomy() { register_taxonomy( 'animal_cat', 'animal', array( 'labels' => array( 'name' => 'Animal Families', 'singular_name' => 'Animal Family', 'search_items' => 'Search Animal Families', 'all_items' => 'All Animal Families', 'edit_item' => 'Edit Animal Families', 'update_item' => 'Update Animal Family', 'add_new_item' => 'Add New Animal Family', 'new_item_name' => 'New Animal Family Name', 'menu_name' => 'Animal Family', ), 'hierarchical' => true, 'sort' => true, 'args' => array( 'orderby' => 'term_order' ), 'rewrite' => array( 'slug' => 'animal-family' ), 'show_admin_column' => true ) ); } add_action( 'init', 'wptp_register_taxonomy' ); |
Una vez hayas hecho esto, añade algo de información. Aquí abajo puedes ver la información que yo he añadido junto con algunos términos de taxonomía aplicados. No pretendo ser muy exacto en mis terminología en lo que respecta a las familias de los animales de manera que, por favor, ¡no hagas ningún comentario si he cometido algún fallo!
2. Configurar la plantilla para los archivos
El siguiente paso consiste en crear una plantilla para el nuevo tipo de entrada. En tu tema, crea un nuevo archivo llamado archive-animal.php
.
Como este es un tema hijo de twentyfourteen, la plantilla del archivo necesitará el código copiado de dicho tema para contener el loop personalizado que vas a crear. Así que añade lo siguiente a la plantilla de tu archivo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php/ *Tutorial para crear una página de archivo que muestre las entradas según taxonomia Plantilla de archivo para el custom post type animal */ ?> <?php get_header(); ?> <div id="main-content" class="main-content"> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <header class="archive-header"> <h1 class="archive-title"> <?php post_type_archive_title(); ?> </h1> </header><!-- .archive-header --> </div><!-- #content --> </div><!-- #primary --> <?php get_sidebar( 'content' ); ?> </div><!-- #main-content --> <?php get_sidebar(); get_footer(); |
Nota: Si estás trabajando con tu propio tema, copia el código que contendrá el loop del archivo o el index (archive.php o index.php) de tu propio tema.
3. Organizar la plantilla de los archivos: Extraer los dérminos de taxonomía
Para que tu archivo pueda mostrar los animales según términos de la taxonomía, el siguiente paso consiste en extraer esos términos.
En tu nuevo archivo de plantilla, debajo de la etiqueta de cierre </header>
(o bajo la parte que abre el código que envuelve el loop si estás usando tu propio tema), extrae los términos usando get_terms()
:
1 2 3 4 5 6 |
<?php //empieza a extraer los términos para la taxonomia animal_cat $terms = get_terms( 'animal_cat', array( 'orderby' => 'count', 'hide_empty' => 0 ) ); ?> |
Observa que he usado aquí dos parámetros:
orderby
– esto te permite especificar el orden de los términos mostrados. Yo he usadocount
como valor de manera que el término con mayor cantidad de entradas se mostrará en primer lugar, pero podrías ordenarlos por nombre o por ID – si lo dejas vacío, WordPress los ordenará por nombre. Consulta la página del Codex enget_terms()
para conocer más detalles.
hide_empty
– le indica a WordPress que no extraiga ningún término que no tenga ninguna entrada asignada. Te ahorra el tener que comprobar más adelante si tu consulta tiene entradas.
Lo que te queda por leer:
-
4. Rellenar la plantilla de archivo: Definir la consulta
-
5. Rellenar la plantilla de archivo: Añadir el Loop
-
El Loop completo
-
-
Resumen
Deja una respuesta