Archivos de taxonomía Lista de publicaciones según los términos de una segunda taxonomía

Lo que vas a crear

Si su sitio utiliza múltiples taxonomías para clasificar la información, puede ser útil dividir las publicaciones en un archivo de taxonomía según los términos de una segunda taxonomía.. 

En este tutorial, te mostraré cómo crear un archivo de taxonomía para hacer precisamente eso..

Si alguna vez ha trabajado con bases de datos multi-relacionales, sabrá que una de sus excelentes características es la forma en que puede ver los datos de acuerdo con múltiples taxonomías. Por ejemplo, si tiene una base de datos de clientes, puede ver fácilmente qué clientes lo han contratado para diferentes categorías de proyectos, y luego puede ver qué clientes de diseño web están, por ejemplo, en una ubicación determinada.

La primera vez que comencé a trabajar con WordPress me resultó frustrante que no pudieras hacer esto fácilmente, al menos no puedes hacerlo con una instalación de WordPress lista para usar con el tema predeterminado..

Sin embargo, es posible clasificar sus datos por más de una taxonomía. En este tutorial. Le mostraré cómo crear una página de taxonomía para enumerar las publicaciones en esa taxonomía, ordenadas por los términos de otra taxonomía que también se aplican a ellos.. 

Luego, crearé un segundo archivo de taxonomía para la segunda taxonomía, que enumera sus publicaciones en orden de los términos de la primera taxonomía (confía en mí: ¡tendrá más sentido cuando lo veas pasar!)

Lo que necesitarás

Para completar este tutorial necesitarás:

  • una instalación de desarrollo de WordPress
  • un editor de código

1. Creando el tema

Para este tutorial, crearé un tema secundario de veinticuatro con dos nuevos archivos de plantilla, una hoja de estilo y un archivo de funciones. Si está trabajando con su propio tema, simplemente copie el código de mi archivo de funciones en el archivo de funciones de su tema, y ​​agregue los archivos de plantilla con ajustes para reflejar el marcado de su tema.

Para crear mi tema, creo un archivo llamado style.css en mi carpeta de tema vacía y rellénela con lo siguiente:

/ * Nombre del tema: WPTutsPlus Cree un archivo de taxonomía para enumerar las publicaciones según los términos de una segunda taxonomía URI de tema: http://rachelmccollin.co.uk/wptutsplus-taxonomy-archive-list-by-second-taxonomy/ Descripción: Theme to support WPTutsPlus tutorial sobre cómo crear un archivo de taxonomía personalizado. Tema infantil para el tema Veinte catorce. Autor: Rachel McCollin Autor URI: http://rachelmccollin.co.uk/ Plantilla: veinte catorce Versión: 1.0 * / @import url ("... /twentyfourteen/style.css");

Esto crea mi tema hijo.

2. Registro del tipo de puesto y taxonomías.

Para este tutorial voy a utilizar el mismo. 'animales' tipo de mensaje y 'animal_cat' taxonomía que utilicé en mi tutorial para crear una plantilla de tipo de publicación personalizada. También agregaré una segunda taxonomía llamada 'habitat'.

Para ello, creo un nuevo archivo llamado funciones.php. Primero, agrego la función para registrar mi tipo de publicación:

 __ ('Animales'), 'singular_name' => __ ('animal'), 'add_new' => __ ('Nuevo animal'), 'add_new_item' => __ ('Agregar nuevo animal'), 'edit_item' = > __ ('Editar animal'), 'new_item' => __ ('Nuevo animal'), 'view_item' => __ ('Ver animal'), 'search_items' => __ ('Buscar animales'), 'not_found '=> __ (' No se encontraron animales '),' not_found_in_trash '=> __ (' No se encontraron animales en la Papelera '),); $ args = array ('labels' => $ labels, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'support' => array ('title', 'editor', ' extracto ',' campos personalizados ',' miniatura ',' atributos de página '),' taxonomías '=> array (' post_tag ',' categoría '),); register_post_type ('animal', $ args);  add_action ('init', 'wptp_create_post_type'); ?>

Y luego registro mis dos taxonomías dentro de una función:

 array ('name' => 'Animal Families', 'singular_name' => 'Animal Family', 'search_items' => 'Search Animal Families', 'all_items' => 'All Animal Families', 'edit_item' => ' Editar familias de animales ',' update_item '=>' Actualizar familia de animales ',' add_new_item '=>' Agregar nueva familia de animales ',' new_item_name '=>' Nuevo nombre de familia de animales ',' menu_name '=>' Animal Family ', ), 'hierarchical' => true, 'sort' => true, 'args' => array ('orderby' => 'term_order'), 'rewrite' => array ('slug' => 'animal-family' ), 'show_admin_column' => true)); // registrar una taxonomía llamada 'Habitat' register_taxonomy ('habitat', 'animal', array ('labels' => array ('name' => 'Habitats', 'singular_name' => 'Habitat', 'search_items' = > 'Search Habitats', 'all_items' => 'All Habitats', 'edit_item' => 'Edit Habitat', 'update_item' => 'Update Habitat', 'add_new_item' => 'Add New Habitat', 'new_item_name' => 'Nuevo nombre de hábitat', 'nombre de menú' => 'Habitat',), 'jerárquico' => verdadero, 'sort' => verdadero, 'args' => array ('orderby' => 'term_order'), 'show_admin_column' => true));  add_action ('init', 'wptp_register_taxonomies'); ?>

Esto crea el 'animal' Tipo de puesto y las dos taxonomías que se le aplican. Tenga en cuenta que he usado 'show_admin_column' Para hacer la vida un poco más fácil al administrar mis mensajes..

Después de agregar algunos datos y clasificar los animales según mis taxonomías, ahora puedo ver mis datos en el panel de WordPress, como se muestra a continuación.

Nota: Mi clasificación de los animales que he usado no es muy científica. No haga comentarios sobre mi comprensión de los hábitats o las familias.!

3. Creando el primer archivo de plantilla de taxonomía

El siguiente paso es crear un archivo de plantilla para el 'animal_cat' Archivo de taxonomia. Crea un archivo en tu carpeta de temas y llámalo taxonomía-animal_cat.php. Ahora agregue el código del envoltorio desde su tema (lo he copiado de mi tema principal, el suyo será diferente si está usando su propio tema):

  

Este archivo de plantilla ahora necesita tener algunos datos agregados.

Identificando el Término Consultado Actual

La plantilla de archivo utilizará WP_Query para crear una consulta personalizada para cada término. Uno de los objetos consultados será el término de taxonomía actual que se muestra, por lo que necesita identificarlo y almacenarlo como una variable.

Bajo la get_header () línea, añadir:

Puedes usar eso $ animalcat variable más adelante.

Salida de un encabezado de página

Actualmente, el archivo no tiene un encabezado principal, por lo que debe agregar uno usando la variable que acaba de definir.

Despues de la apertura

etiqueta, agregue lo siguiente:

 

nombre; ?>

Obteniendo términos para la segunda taxonomía

A continuación, debe buscar la lista de términos para la segunda taxonomía. Debajo del código que acaba de agregar, inserte esto:

 0)); ?>

Esto buscará una lista de todos los términos y la almacenará en una matriz. Mediante el uso 'hide_empty' puede evitar que se muestren términos vacíos, pero como verá en breve, esto solo evita que se consulten términos que no tienen ninguna publicación, no aquellos que no tienen publicaciones con el término de taxonomía consultado actualmente.

Creando el Loop

Ahora crea un bucle que se ejecutará para cada uno de los términos:

 'animal', 'animal_cat' => $ animalcat-> slug, 'habitat' => $ term-> slug); $ consulta = nueva WP_Query ($ args); // mostrar el término nombre en una etiqueta de encabezado echo '

'. $ término-> nombre. hábitat

'; // mostrar los títulos de los posts en una lista echo '
    '; // Iniciar el bucle while ($ consulta-> have_posts ()): $ consulta-> the_post (); ?>
  • ">
  • '; // usa reset postdata para restaurar la consulta original wp_reset_postdata (); ?>

Algunas notas sobre esto:

  • Para cada término, se define una nueva consulta..
  • Los argumentos para la consulta incluyen el término en la segunda taxonomía (término $) y el término actualmente en consulta ($ animalcat).
  • Si sus taxonomías solo se aplican a un tipo de publicación, podría omitir el 'tipo de mensaje' argumento pero prefiero incluirlo por si acaso.
  • los término $ La variable se usa para generar un título para cada sección usando $ término-> nombre.

Ahora guarde su archivo de plantilla y eche un vistazo al archivo de taxonomía de uno de sus Familia animal condiciones:

Agregar un cheque para publicaciones en cada consulta

En este momento, como puede ver, la plantilla está generando listas vacías. Esto se arregla fácilmente comprobando si cada consulta tiene publicaciones.

Envuelve lo siguiente alrededor de tu bucle:

if ($ consulta-> have_posts ()) 

Tu bucle ahora se verá así:

if ($ query-> have_posts ()) // muestra el nombre del término en una etiqueta de encabezado echo '

'. $ término-> nombre. hábitat

'; // mostrar los títulos de los posts en una lista echo '
    '; // Iniciar el bucle while ($ consulta-> have_posts ()): $ consulta-> the_post (); ?>
  • ">
  • ';

Esto evita que WordPress ejecute el bucle si la consulta no tiene ninguna publicación, eliminando esos encabezados vacíos. Ahora mi página de archivo se ve así:

Mucho mejor!

Creando el Archivo de Plantilla para la Segunda Taxonomía

El último paso es crear un archivo de plantilla para los archivos de la segunda taxonomía..

Copia tu primer archivo de plantilla y renómbrelo taxonomía-habitat.php. Edítalo para que la terminología sea correcta. Las ediciones que necesito hacer en mi archivo son:

  • ajustar los comentarios en la parte superior del archivo para que sean precisos
  • cambiando el nombre del $ animalcat variable a $ habitat (Podría evitar este problema al darle a la variable un nombre más genérico, pero no lo llame término $ como lo estas usando en otro lado)
  • editando el

    partida por lo que utiliza el $ habitat variable para mostrar el nombre del término consultado actual (también he agregado texto explicativo aquí, que es opcional)

  • cambiando el primer parámetro de la get_terms ()función por lo que utiliza la animal_cat término, no el habitat término.
  • editando los argumentos de consulta, esencialmente intercambiando los valores por 'animal_cat' y 'habitat'.
  • editando el

    Contenidos en el bucle para referirse a familias no a hábitats..

Esto significa que mi nuevo archivo de plantilla se ve así:

   

Habitat - nombre; ?>

0)); ?> 'animal', 'animal_cat' => $ term-> slug, 'habitat' => $ habitat-> slug); $ consulta = nueva WP_Query ($ args); if ($ query-> have_posts ()) // muestra el nombre del término en una etiqueta de encabezado echo '

'. $ término-> nombre. ' familia

'; // mostrar los títulos de los posts en una lista echo '
    '; // Iniciar el bucle while ($ consulta-> have_posts ()): $ consulta-> the_post (); ?>
  • ">
  • '; // use reset postdata para restaurar la consulta original wp_reset_postdata (); ?>

Después de realizar esos cambios, guarde su nuevo archivo de plantilla y marque uno de sus archivos:

Ahora tiene una página para la segunda taxonomía que funciona de la misma manera que la primera taxonomía..

Resumen

En este tutorial, ha aprendido una forma de mostrar datos usando múltiples taxonomías. Puede llevar esto más lejos trabajando con una tercera taxonomía, de una de las dos maneras siguientes:

  1. Repita el proceso de obtención de términos, definiendo una consulta y ejecutando el bucle para el tercer término después del segundo término, de modo que tenga dos listas separadas.
  2. Combine sus datos usando los tres términos, usando cada uno término $ variable de forma similar a la $ habitat o $ animalcat variable y añadiendo un extra para cada() declaración dentro de su existente para cada() declaración. A continuación, deberá pensar cómo distribuir los datos resultantes utilizando listas o una cuadrícula..

¿Por qué no intentarlo??