Taxonomiearchieven vermeld berichten op basis van de voorwaarden van een tweede taxonomie

Wat je gaat creëren

Als uw site meerdere taxonomieën gebruikt om informatie te categoriseren, kan het nuttig zijn om berichten in een taxonomiearchief op te delen volgens de voorwaarden van een tweede taxonomie. 

In deze tutorial laat ik je zien hoe je een taxonomiearchief maakt om precies dat te doen.

Als u ooit met multirelaties-databases hebt gewerkt, weet u dat een van hun geweldige functies de manier is waarop u gegevens kunt weergeven op basis van meerdere taxonomieën. Als u bijvoorbeeld een database van clients hebt, kunt u eenvoudig zien welke klanten u hebben ingehuurd voor verschillende projectcategorieën en dat vervolgens verder sorteren door te zien welke webontwerpclients zich bijvoorbeeld op een bepaalde locatie bevinden..

Toen ik voor het eerst met WordPress begon te werken, vond ik het frustrerend dat je dit niet gemakkelijk kon doen - je kunt het tenminste niet doen met een standaard WordPress-installatie met het standaardthema.

Het is echter mogelijk om uw gegevens te classificeren op basis van meer dan één taxonomie. In deze zelfstudie. Ik zal je laten zien hoe je een taxonomiepagina kunt maken om berichten in die taxonomie te vermelden, geordend volgens de voorwaarden van een andere taxonomie die ook op hen van toepassing zijn. 

Vervolgens maak ik een tweede taxonomiearchief voor de tweede taxonomie, waarin de berichten worden vermeld op volgorde van de voorwaarden van de eerste taxonomie (geloof me, het zal logischer zijn als je het ziet gebeuren!)

Wat je nodig hebt

Om deze tutorial te voltooien, heb je nodig:

  • een ontwikkelingsinstallatie van WordPress
  • een code-editor

1. Het thema maken

Voor deze zelfstudie maak ik een kindthema van vierentwintig met twee nieuwe sjabloonbestanden, een stijlblad en een functiedossier. Als u met uw eigen thema werkt, kopieert u de code uit mijn functiesbestand naar het functiedossier van uw thema en voegt u de sjabloonbestanden toe met tweaks om de opmaak van uw thema weer te geven..

Om mijn thema te maken, maak ik een bestand met de naam style.css in mijn lege themamap en vul het met het volgende in:

/ * Naam van het thema: WPTutsPlus Een taxonomiearchief maken naar lijst Posts op basis van de voorwaarden van een tweede taxonomie Thema URI: http://rachelmccollin.co.uk/wptutsplus-taxonomy-archive-list-by-second-taxonomy/ Beschrijving: thema ter ondersteuning WPTutsPlus-zelfstudie over het maken van een aangepast taxonomiearchief. Kindthema voor het Twenty veertien-thema. Auteur: Rachel McCollin Auteur URI: http://rachelmccollin.co.uk/ Sjabloon: twentyfourteen Versie: 1.0 * / @import url ("... /twentyfourteen/style.css");

Hiermee wordt het thema van mijn kind gemaakt.

2. Registreren van het berichttype en de taxonomieën

Voor deze tutorial ga ik hetzelfde gebruiken 'Dieren' berichttype en 'Animal_cat' taxonomie die ik in mijn zelfstudie heb gebruikt bij het maken van een aangepast berichttypeboekje. Ik zal ook een tweede taxonomie toevoegen genaamd 'Habitat'.

Om dit te doen, maak ik een nieuw bestand met de naam functions.php. Eerst voeg ik de functie toe om mijn berichttype te registreren:

 __ ('Dieren'), 'singular_name' => __ ('dier'), 'add_new' => __ ('Nieuw dier'), 'add_new_item' => __ ('Nieuw dier toevoegen'), 'edit_item' = > __ ('Edit animal'), 'new_item' => __ ('Nieuw dier'), 'view_item' => __ ('View animal'), 'search_items' => __ ('Dieren zoeken'), 'not_found '=> __ (' Geen dieren gevonden '),' not_found_in_trash '=> __ (' Geen dieren gevonden in de Prullenbak '),); $ 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 ('dier', $ args);  add_action ('init', 'wptp_create_post_type'); ?>

En dan registreer ik mijn twee taxonomieën binnen één functie:

 array ('name' => 'Animal Families', 'singular_name' => 'Animal Family', 'search_items' => 'Search Animal Families', 'all_items' => 'Alle dierenfamilies', 'edit_item' => ' Edit Animal Families ',' update_item '=>' Update Animal Family ',' add_new_item '=>' Nieuwe dierfamilie toevoegen ',' nieuwe_itemnaam '=>' Nieuwe dierfamilie naam ',' menu_name '=>' Dierfamilie ', ), 'hierarchical' => true, 'sort' => true, 'args' => array ('orderby' => 'term_order'), 'rewrite' => array ('slug' => 'dierfamilie' ), 'show_admin_column' => true)); // registreer een taxonomie genaamd 'Habitat' register_taxonomy ('habitat', 'animal', array ('labels' => array ('name' => 'Habitats', 'singular_name' => 'Habitat', 'search_items' = > 'Search Habitats', 'all_items' => 'All Habitats', 'edit_item' => 'Habitat bewerken', 'update_item' => 'Habitat bijwerken', 'add_new_item' => 'Nieuwe habitat toevoegen', 'nieuwe_itemnaam' => 'New Habitat Name', 'menu_name' => 'Habitat',), 'hierarchical' => true, 'sort' => true, 'args' => array ('orderby' => 'term_order'), 'show_admin_column' => true));  add_action ('init', 'wptp_register_taxonomies'); ?>

Dit maakt de 'dier' berichttype en de twee taxonomieën die erop van toepassing zijn. Merk op dat ik heb gebruikt 'Show_admin_column' om het leven een beetje gemakkelijker te maken bij het beheren van mijn berichten.

Na het toevoegen van enkele gegevens en het classificeren van de dieren volgens mijn taxonomieën, kan ik nu mijn gegevens bekijken in het WordPress-dashboard, zoals hieronder weergegeven.

Opmerking: Mijn classificatie van de dieren die ik heb gebruikt is niet erg wetenschappelijk - geef alsjeblieft geen commentaar op mijn begrip van habitats of gezinnen!

3. Het eerste taxonomiesjabloonbestand maken

De volgende stap is het maken van een sjabloonbestand voor de 'Animal_cat' taxonomie archief. Maak een bestand in uw themamap en noem het taxonomie-animal_cat.php. Voeg nu de wrapper-code toe aan uw thema (ik heb dit gekopieerd van mijn ouderthema, de uwe zal anders zijn als u uw eigen thema gebruikt):

  

In dit sjabloonbestand moeten nu enkele gegevens worden toegevoegd.

Identificatie van de huidige opgevraagde term

De archiefsjabloon zal gebruiken WP_Query om een ​​aangepaste zoekopdracht voor elke term te maken. Een van de opgevraagde objecten is de huidige taxonomieterm die wordt weergegeven, dus u moet dat identificeren en opslaan als een variabele.

Onder de get_header () regel, voeg toe:

Je kunt dat dan gebruiken $ animalcat variabele later.

Een paginakop uitvoeren

Het archief heeft momenteel geen hoofdkop, dus u moet er een toevoegen met de variabele die u zojuist hebt gedefinieerd.

Na de opening

tag, voeg het volgende toe:

 

naam; ?>

Ophalen van termen voor de tweede taxonomie

Vervolgens moet u de lijst met termen voor de tweede taxonomie ophalen. Onder de code die je zojuist hebt toegevoegd, voeg je dit in:

 0)); ?>

Hiermee wordt een lijst met alle termen opgehaald en in een array opgeslagen. Door het gebruiken van 'Hide_empty' u kunt voorkomen dat lege termen worden weergegeven - maar zoals u zult zien, voorkomt dit gewoon dat er termen worden opgevraagd die helemaal geen berichten bevatten, en niet die waarvoor geen berichten zijn met de term die momenteel wordt opgevraagd.

De lus maken

Maak nu een lus die wordt uitgevoerd voor elk van de voorwaarden:

 'animal', 'animal_cat' => $ animalcat-> slug, 'habitat' => $ term-> slug); $ query = new WP_Query ($ args); // output de term naam in een echo van de eindtag '

'. $ term-> naam. habitat

'; // de berichttitels uitvoeren in een lijstecho '
    '; // Start the Loop while ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • '; // gebruik reset postdata om de oorspronkelijke query wp_reset_postdata () te herstellen; ?>

Een paar opmerkingen hierover:

  • Voor elke term is een nieuwe query gedefinieerd.
  • De argumenten voor de query omvatten de term in de tweede taxonomie ($ term) en de term die op dit moment wordt bevraagd ($ animalcat).
  • Als uw taxonomieën alleen van toepassing zijn op één berichttype, kunt u de 'Post_type' maar ik geef er de voorkeur aan het op te nemen voor het geval dat.
  • De $ term variabele wordt gebruikt om een ​​titel uit te voeren voor elke sectie met $ Termijn-> name.

Bewaar nu uw sjabloonbestand en bekijk het taxonomiearchief voor een van uw Dierlijke familie termen:

Een controle toevoegen voor berichten aan elke zoekopdracht

Op dit moment, zoals u kunt zien, voert de sjabloon lege lijsten uit. Dit kan eenvoudig worden opgelost door na te gaan of elke zoekopdracht posts bevat.

Wikkel het volgende rond je lus:

if ($ query-> have_posts ()) 

Je lus ziet er nu als volgt uit:

if ($ query-> have_posts ()) // voer de term naam uit in een heading-tag echo '

'. $ term-> naam. habitat

'; // de berichttitels uitvoeren in een lijstecho '
    '; // Start the Loop while ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • ';

Dit voorkomt dat WordPress de lus uitvoert als de query geen berichten bevat en deze lege koppen verwijdert. Nu ziet mijn archiefpagina er als volgt uit:

Veel beter!

Het sjabloonbestand maken voor de tweede taxonomie

De laatste stap is het maken van een sjabloonbestand voor de archieven van de tweede taxonomie.

Kopieer uw eerste sjabloonbestand en hernoem het taxonomie-habitat.php. Bewerk het zodat de terminologie correct is. De bewerkingen die ik in mijn bestand moet aanbrengen, zijn:

  • de opmerkingen bovenaan het bestand aanpassen, zodat ze kloppen
  • de naam van de wijzigen $ animalcat variabele naar $ leefgebied (je zou dit probleem kunnen vermijden door de variabele een meer generieke naam te geven - maar noem het niet $ term zoals je dat ergens anders gebruikt)
  • bewerken van de

    heading zodat het de $ leefgebied variabele om de naam van de huidige bevraagde term uit te voeren (ik heb hier ook een verklarende tekst toegevoegd die optioneel is)

  • het veranderen van de eerste parameter van de get_terms ()functie zodat het de animal_cat termijn, niet de leefgebied termijn.
  • bewerken van de queryargumenten, in wezen de waarden omwisselen voor 'Animal_cat' en 'Habitat'.
  • bewerken van de

    inhoud in de lus om te verwijzen naar gezinnen die geen habitats zijn.

Dit betekent dat mijn nieuwe sjabloonbestand er als volgt uitziet:

   

Habitat - naam; ?>

0)); ?> 'animal', 'animal_cat' => $ term-> naaktslak, 'habitat' => $ habitat-> naaktslak); $ query = new WP_Query ($ args); if ($ query-> have_posts ()) // voer de term naam uit in een heading-tag echo '

'. $ term-> naam. ' familie

'; // de berichttitels uitvoeren in een lijstecho '
    '; // Start the Loop while ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • '; // gebruik reset postdata om orginal query wp_reset_postdata () te herstellen; ?>

Nadat u deze wijzigingen hebt aangebracht, slaat u uw nieuwe sjabloonbestand op en vinkt u een van uw archieven aan:

U hebt nu een pagina voor de tweede taxonomie die op dezelfde manier werkt als de eerste.

Samenvatting

In deze zelfstudie hebt u een manier geleerd om gegevens weer te geven met behulp van meerdere taxonomieën. Je kunt dit verder brengen door met een derde taxonomie te werken, op een van de twee volgende manieren:

  1. Herhaal het proces van het ophalen van termen, het definiëren van een query en het uitvoeren van de lus voor de derde term na de tweede termijn, zodat u twee afzonderlijke lijsten hebt.
  2. Voeg uw gegevens samen met alle drie de termen, door ze allemaal te gebruiken $ term variabele op een vergelijkbare manier als de $ leefgebied of $ animalcat variabel en een extra toevoegen foreach () verklaring in je bestaande foreach () uitspraak. U moet dan nadenken over hoe u de resulterende gegevens kunt opmaken met behulp van lijsten of een raster.

Waarom niet proberen??