Taxonomie Archives Liste des postes en fonction des termes d'une deuxième taxonomie

Ce que vous allez créer

Si votre site utilise plusieurs taxonomies pour classer les informations, il peut être utile de fractionner les publications dans une archive de taxonomie selon les termes d'une deuxième taxonomie.. 

Dans ce tutoriel, je vais vous montrer comment créer une archive de taxonomie pour le faire..

Si vous avez déjà travaillé avec des bases de données multi-relationnelles, vous saurez que l’une de leurs principales fonctionnalités est la façon dont vous pouvez afficher les données selon plusieurs taxonomies. Par exemple, si vous avez une base de données de clients, vous pouvez facilement voir quels clients vous ont embauché pour différentes catégories de projets, puis les trier davantage en déterminant quels clients de conception Web se trouvent, par exemple, à un emplacement donné..

Quand j'ai commencé à travailler avec WordPress, j'ai trouvé frustrant de ne pouvoir le faire facilement. Du moins, vous ne pouvez pas le faire avec une installation WordPress prête à l'emploi exécutant le thème par défaut..

Cependant, il est possible de classer vos données selon plus d'une taxonomie. Dans ce tutoriel. Je vais vous montrer comment créer une page de taxonomie pour répertorier les articles de cette taxonomie, classés selon les termes d'une autre taxonomie, qui s'appliquent également à eux.. 

Je créerai ensuite une deuxième archive de taxonomie pour la deuxième taxonomie, qui répertorie ses publications dans l'ordre des termes utilisés pour la première taxonomie (croyez-moi, cela aura plus de sens quand cela se produira!)

Ce dont vous aurez besoin

Pour compléter ce tutoriel, vous aurez besoin de:

  • une installation de développement de WordPress
  • un éditeur de code

1. Créer le thème

Pour ce tutoriel, je vais créer un thème enfant de vingt-quatre ans avec deux nouveaux fichiers de modèle, une feuille de style et un fichier de fonctions. Si vous travaillez avec votre propre thème, copiez simplement le code de mon fichier de fonctions dans le fichier de fonctions de votre thème et ajoutez les fichiers de modèle avec des ajustements pour refléter le balisage de votre thème..

Pour créer mon thème, je crée un fichier appelé style.css dans mon dossier de thème vide et remplissez-le avec les éléments suivants:

/ * Nom du thème: WPTutsPlus Créer une archive de taxonomie pour répertorier les messages d'un deuxième terme de taxonomie URI de thème: http://rachelmccollin.co.uk/wptutsplus-taxonomy-archive-list-by-second-taxonomy/ Description: Thème à soutenir WPTutsPlus tutoriel sur la création d’une archive de taxonomie personnalisée. Thème enfant pour le thème Vingt Quatorze. Auteur: Rachel McCollin Auteur URI: http://rachelmccollin.co.uk/ Modèle: vingt-quatre ans Version: 1.0 * / @import url ("… /twentyfourteen/style.css");

Cela crée le thème de mon enfant.

2. Enregistrement du type de poste et des taxonomies

Pour ce tutoriel, je vais utiliser le même 'animaux' type de poste et 'animal_cat' taxonomie que j’ai utilisée dans mon tutoriel pour la création d’un modèle de type de publication personnalisé. Je vais aussi ajouter une deuxième taxonomie appelée 'habitat'.

Pour ce faire, je crée un nouveau fichier appelé functions.php. Tout d'abord, j'ajoute la fonction pour enregistrer mon type de message:

 __ ('Animaux'), 'singular_name' => __ ('animal'), 'add_new' => __ ('Nouvel animal'), 'add_new_item' => __ ('Ajouter un nouvel animal'), 'edit_item' = > __ ('Edit animal'), 'new_item' => __ ('Nouvel animal'), 'view_item' => __ ('Voir l'animal'), 'search_items' => __ ('Recherche d'animaux'), 'not_found '=> __ (' Aucun animal trouvé '),' not_found_in_trash '=> __ (' Aucun animal trouvé à la corbeille '),); $ args = array ('labels' => $ labels, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'supports' => array ('titre', 'éditeur', ' extrait ',' custom-fields ',' thumbnail ',' attribut de page '),' taxonomies '=> array (' post_tag ',' category '),); register_post_type ('animal', $ args);  add_action ('init', 'wptp_create_post_type'); ?>

Et puis j'inscris mes deux taxonomies dans une fonction:

 array ('name' => 'Familles d'animaux', 'singular_name' => 'Famille d'animaux', 'search_items' => 'Recherche de familles d'animaux', 'all_items' => 'Toutes les familles d'animaux', 'edit_item' => ' Edit Animal Families ',' update_item '=>' Mettre à jour la famille d’animaux ',' add_new_item '=>' Ajouter une nouvelle famille d’animaux ',' new_item_name '=>' Nouveau nom de famille d’animaux ',' menu_name '=>' Famille d’animaux ',> ), 'hierarchical' => true, 'sort' => true, 'args' => array ('orderby' => 'term_order'), 'rewrite' => array ('slug' => 'animal-family' ), 'show_admin_column' => true)); // enregistre une taxonomie appelée 'Habitat' register_taxonomy ('habitat', 'animal', array ('labels' => array ('name' => 'Habitats', 'singular_name' => 'Habitat', 'search_items' = > 'Search Habitats', 'all_items' => 'Tous les habitats', 'edit_item' => 'Modifier l'habitat', 'update_item' => 'Mettre à jour l'habitat', 'add_new_item' => 'Ajouter un nouvel habitat', 'new_item_name' => 'Nouveau nom d’habitat', 'menu_name' => 'Habitat',), 'hierarchical' => true, 'sort' => true, 'args' => array ('orderby' => 'term_order'), 'show_admin_column' => true));  add_action ('init', 'wptp_register_taxonomies'); ?>

Cela crée le 'animal' type de poste et les deux taxonomies qui s’y appliquent. Notez que j'ai utilisé 'show_admin_column' rendre la vie un peu plus facile lors de l'administration de mes posts.

Après avoir ajouté des données et classé les animaux en fonction de mes taxonomies, je peux maintenant voir mes données dans le tableau de bord WordPress, comme indiqué ci-dessous..

Remarque: ma classification des animaux que j'ai utilisés n'est pas très scientifique - veuillez ne pas commenter ma compréhension des habitats ou des familles.!

3. Création du premier fichier de modèle de taxonomie

L’étape suivante consiste à créer un fichier modèle pour le 'animal_cat' archives de taxonomie. Créez un fichier dans votre dossier de thèmes et appelez-le. taxonomy-animal_cat.php. Maintenant, ajoutez le code d’emballage à partir de votre thème (je l’ai copié de mon thème parent, le vôtre sera différent si vous utilisez votre propre thème):

  

Des données doivent maintenant être ajoutées à ce fichier de modèle..

Identifier le terme demandé actuel

Le modèle d'archive utilisera WP_Query créer une requête personnalisée pour chaque terme. L'un des objets interrogés sera le terme de taxonomie en cours d'affichage. Vous devez donc l'identifier et le stocker en tant que variable..

Sous le get_header () ligne, ajouter:

Vous pouvez ensuite l'utiliser $ animalcat variable plus tard.

Sortie d'un en-tête de page

L'archive n'a actuellement pas d'en-tête principal, vous devez donc en ajouter un en utilisant la variable que vous venez de définir..

Après l'ouverture

tag, ajoutez ce qui suit:

 

prénom; ?>

Récupération de termes pour la deuxième taxonomie

Ensuite, vous devez récupérer la liste des termes pour la deuxième taxonomie. Sous le code que vous venez d'ajouter, insérez ceci:

 0)); ?>

Cela va chercher une liste de tous les termes et le stocker dans un tableau. En utilisant 'hide_empty' vous pouvez éviter d'afficher des termes vides - mais comme vous le verrez bientôt, cela empêche simplement les termes qui sont interrogés et qui n'ont aucun message, pas ceux qui n'en contiennent pas avec le terme de taxonomie actuellement recherché..

Créer la boucle

Maintenant, créez une boucle qui fonctionnera pour chacun des termes:

 'animal', 'animal_cat' => $ animalcat-> limace, 'habitat' => $ term-> limace); $ query = new WP_Query ($ args); // affiche le nom du terme dans une balise de titre echo '

'. $ terme-> nom. 'habitat

'; // affiche les titres de l'article dans une liste echo '
    '; // Démarrer la boucle while ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • '; // utilise reset postdata pour restaurer la requête initiale wp_reset_postdata (); ?>

Quelques notes à ce sujet:

  • Pour chaque terme, une nouvelle requête est définie.
  • Les arguments de la requête incluent le terme dans la deuxième taxonomie ($ terme) et le terme actuellement demandé ($ animalcat).
  • Si vos taxonomies ne s'appliquent qu'à un seul type de poste, vous pouvez laisser de côté le 'Type de poste' argument, mais je préfère l'inclure juste au cas où.
  • le $ terme La variable est utilisée pour produire un titre pour chaque section en utilisant $ term-> nom.

Enregistrez maintenant votre fichier de modèle et jetez un coup d’œil aux archives de taxonomie de l’un de vos fichiers. Famille d'animaux termes:

Ajout d'un chèque pour les messages à chaque requête

Pour le moment, comme vous pouvez le constater, le modèle génère des listes vides. Ceci est facilement corrigé en vérifiant si chaque requête a des publications.

Enroulez les éléments suivants autour de votre boucle:

if ($ query-> have_posts ()) 

Votre boucle va maintenant ressembler à ceci:

if ($ query-> have_posts ()) // affiche le nom du terme dans une balise de titre echo '

'. $ terme-> nom. 'habitat

'; // affiche les titres de l'article dans une liste echo '
    '; // Démarrer la boucle while ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • ';

Cela empêche WordPress d'exécuter la boucle si la requête ne contient aucun article, supprimant ainsi les en-têtes vides. Maintenant, ma page d'archive ressemble à ceci:

Beaucoup mieux!

Création du fichier modèle pour la deuxième taxonomie

La dernière étape consiste à créer un fichier modèle pour les archives de la deuxième taxonomie..

Copiez votre premier fichier de modèle et renommez-le taxonomy-habitat.php. Modifiez-le pour que la terminologie soit correcte. Les modifications que je dois apporter à mon dossier sont les suivantes:

  • peaufiner les commentaires en haut du fichier afin qu'ils soient précis
  • changer le nom du $ animalcat variable à $ habitat (vous pouvez éviter ce problème en donnant à la variable un nom plus générique - mais ne l'appelez pas $ terme comme vous l'utilisez ailleurs)
  • éditer le

    cap donc il utilise le $ habitat variable pour afficher le nom du terme interrogé actuel (j'ai également ajouté un texte explicatif ici qui est facultatif)

  • changer le premier paramètre de la get_terms ()fonctionne donc il utilise le animal_cat terme, pas le habitat terme.
  • éditer les arguments de la requête, en échangeant les valeurs pour 'animal_cat' et 'habitat'.
  • éditer le

    contenu dans la boucle pour désigner les familles et non les habitats.

Cela signifie que mon nouveau fichier de modèle ressemble à ceci:

   

Habitat - prénom; ?>

0)); ?> 'animal', 'animal_cat' => $ terme-> limace, 'habitat' => $ habitat-> limace); $ query = new WP_Query ($ args); if ($ query-> have_posts ()) // affiche le nom du terme dans une balise de titre echo '

'. $ terme-> nom. 'famille

'; // affiche les titres de l'article dans une liste echo '
    '; // Démarrer la boucle while ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • '; // utilise reset postdata pour restaurer la requête initiale wp_reset_postdata (); ?>

Après avoir apporté ces modifications, enregistrez votre nouveau fichier de modèle et vérifiez l’une de vos archives:

Vous avez maintenant une page pour la deuxième taxonomie qui fonctionne de la même manière que la première..

Résumé

Dans ce didacticiel, vous avez appris à afficher des données à l'aide de plusieurs taxonomies. Vous pouvez aller plus loin en utilisant une troisième taxonomie, de l'une des deux manières suivantes:

  1. Répétez le processus de recherche des termes, définissez une requête et exécutez la boucle pour le troisième terme après le deuxième terme, de sorte que vous disposiez de deux listes distinctes..
  2. Fusionner vos données en utilisant les trois termes, en utilisant chacun $ terme variable de manière similaire à la $ habitat ou $ animalcat variable et l'ajout d'un extra pour chaque() déclaration à l'intérieur de votre existant pour chaque() déclaration. Vous devez ensuite réfléchir à la manière de structurer les données obtenues à l'aide de listes ou d'une grille..

Pourquoi ne pas essayer?