Taxonomie-Archiv Listen Sie die Beiträge einer zweiten Taxonomie auf

Was Sie erstellen werden

Wenn Ihre Site mehrere Taxonomien zum Kategorisieren von Informationen verwendet, kann es hilfreich sein, die Einträge in einem Taxonomiearchiv nach den Bedingungen einer zweiten Taxonomie aufzuteilen. 

In diesem Tutorial zeige ich Ihnen, wie Sie dazu ein Taxonomie-Archiv erstellen.

Wenn Sie jemals mit multirelationalen Datenbanken gearbeitet haben, wissen Sie, dass eine der großartigsten Funktionen darin besteht, Daten nach verschiedenen Taxonomien anzuzeigen. Wenn Sie beispielsweise über eine Datenbank mit Clients verfügen, können Sie leicht feststellen, welche Clients Sie für verschiedene Projektkategorien eingestellt haben, und diese dann weiter sortieren, indem Sie feststellen, welche Webdesign-Clients sich an einem bestimmten Ort befinden.

Als ich anfing, mit WordPress zu arbeiten, war es frustrierend, dass Sie dies nicht ohne weiteres tun konnten - zumindest können Sie dies nicht mit einer WordPress-Installation tun, die das Standarddesign ausführt.

Es ist jedoch möglich, Ihre Daten nach mehreren Taxonomien zu klassifizieren. In diesem Tutorial. Ich zeige Ihnen, wie Sie eine Taxonomieseite erstellen, um Einträge in dieser Taxonomie aufzulisten, geordnet nach den Bedingungen einer anderen Taxonomie, die auch für sie gilt. 

Ich erstelle dann ein zweites Taxonomie-Archiv für die zweite Taxonomie, in dem die Einträge in der Reihenfolge der ersten Taxonomie aufgelistet sind (vertrauen Sie mir - es ist sinnvoller, wenn Sie es sehen!)

Was du brauchen wirst

Um dieses Tutorial abzuschließen, benötigen Sie:

  • eine Entwicklungsinstallation von WordPress
  • ein Code-Editor

1. Erstellen des Designs

In diesem Lernprogramm werde ich ein untergeordnetes Thema von vierundzwanzig mit zwei neuen Vorlagendateien, einem Stylesheet und einer Funktionsdatei erstellen. Wenn Sie mit Ihrem eigenen Design arbeiten, kopieren Sie einfach den Code aus meiner Funktionsdatei in die Funktionsdatei Ihres Themas und fügen Sie die Vorlagendateien mit Anpassungen hinzu, um die Markierungen Ihres Themas zu berücksichtigen.

Um mein Design zu erstellen, erstelle ich eine Datei mit dem Namen style.css in meinem leeren Designordner und fülle ihn mit folgendem auf:

/ * Themenname: WPTutsPlus Erstellen eines Taxonomie-Archivs zum Auflisten von Beiträgen der Begriffe einer zweiten Taxonomy Themen-URI: http://rachelmccollin.co.uk/wptutsplus-taxonomy-archive-list-by-second-taxonomy/ Beschreibung: Zu unterstützendes Thema WPTutsPlus-Tutorial zum Erstellen eines benutzerdefinierten Taxonomie-Archivs. Kinderthema für das Thema Zwanzig Vierzehn. Autor: Rachel McCollin Autor URI: http://rachelmccollin.co.uk/ Vorlage: fünfundzwanzig Version: 1.0 * / @import url ("… /twentyfourteen/style.css");

So entsteht mein Kinderthema.

2. Registrierung des Post-Typs und der Taxonomien

Für dieses Tutorial werde ich das Gleiche verwenden 'Tiere' Beitragstyp und 'animal_cat' Taxonomie, die ich in meinem Lernprogramm zum Erstellen einer benutzerdefinierten Beitragstypvorlage verwendet habe. Ich werde auch eine zweite Taxonomie hinzufügen 'Lebensraum'.

Dazu erstelle ich eine neue Datei namens Functions.php. Zuerst füge ich die Funktion hinzu, um meinen Beitragstyp zu registrieren:

 __ ('Tiere'), 'singular_name' => __ ('Tier'), 'add_new' => __ ('Neues Tier'), 'add_new_item' => __ ('Neues Tier hinzufügen'), 'edit_item' = > __ ('Tier bearbeiten'), 'new_item' => __ ('Neues Tier'), 'view_item' => __ ('Tier anzeigen'), 'search_items' => __ ('Tiere suchen'), 'not_found '=> __ (' Keine Tiere gefunden '),' not_found_in_trash '=> __ (' Keine Tiere im Papierkorb gefunden),); $ args = array ('labels' => $ labels, 'has_archive' => true, 'public' => true, 'hierarchisch' => false, 'unterstützt' => array ('title', 'editor', ' Auszug ',' Benutzerdefinierte Felder ',' Miniaturansicht ',' Seitenattribute '),' Taxonomien '=> array (' post_tag ',' category '),); register_post_type ('animal', $ args);  add_action ('init', 'wptp_create_post_type'); ?>

Und dann registriere ich meine zwei Taxonomien innerhalb einer Funktion:

 array ('name' => 'Tierfamilien', 'singular_name' => 'Tierfamilien', 'search_items' => 'Tierfamilien suchen', 'all_items' => 'Alle Tierfamilien', 'edit_item' => ' Tierfamilien bearbeiten ',' update_item '=>' Tierfamilie aktualisieren ',' add_new_item '=>' Neue Tierfamilie hinzufügen ',' new_item_name '=>' Name der neuen Tierfamilie ',' menu_name '=>' Tierfamilie ', ), 'hierarchisch' => true, 'sort' => true, 'args' => array ('orderby' => 'term_order'), 'umschreiben' => array ('slug' => 'animal-family') ), 'show_admin_column' => true)); // Eine Taxonomie mit dem Namen 'Habitat' registrieren register_taxonomy ('Habitat', 'Animal', Array ('labels' => array ('name' => 'Habitats', 'singular_name' => 'Habitat', 'search_items' = > 'Habitats durchsuchen', 'all_items' => 'Alle Habitate', 'edit_item' => 'Habitat bearbeiten', 'update_item' => 'Habitat aktualisieren', 'add_new_item' => 'Neuen Habitat hinzufügen', 'new_item_name' => 'Neuer Habitatname', 'menu_name' => 'Habitat',), 'hierarchisch' => true, 'sort' => true, 'args' => array ('orderby' => 'term_order'), 'show_admin_column' => true)));  add_action ('init', 'wptp_register_taxonomies'); ?>

Das schafft die 'Tier' Posttyp und die beiden dafür geltenden Taxonomien. Beachten Sie, dass ich verwendet habe 'show_admin_column' um das Leben etwas einfacher zu machen, wenn ich meine Posts verwalte.

Nachdem ich einige Daten hinzugefügt und die Tiere nach meinen Taxonomien klassifiziert habe, kann ich meine Daten jetzt im WordPress-Dashboard anzeigen (siehe unten).

Hinweis: Meine Einstufung der Tiere, die ich verwendet habe, ist nicht sehr wissenschaftlich - kommentieren Sie bitte nicht mein Verständnis von Lebensräumen oder Familien!

3. Erstellen der ersten Taxonomie-Vorlagendatei

Im nächsten Schritt erstellen Sie eine Vorlagendatei für die 'animal_cat' Taxonomie-Archiv. Erstellen Sie eine Datei in Ihrem Designordner und rufen Sie sie an taxonomy-animal_cat.php. Fügen Sie nun den Wrapper-Code aus Ihrem Design hinzu (ich habe diesen Code aus meinem übergeordneten Design kopiert, Ihr Code wird anders sein, wenn Sie ein eigenes Design verwenden):

  

Für diese Vorlagendatei müssen jetzt einige Daten hinzugefügt werden.

Identifizieren des aktuell abgefragten Begriffs

Die Archivvorlage wird verwendet WP_Query eine benutzerdefinierte Abfrage für jeden Begriff erstellen. Eines der abgefragten Objekte ist der aktuell angezeigte Taxonomiebegriff. Sie müssen ihn also identifizieren und als Variable speichern.

Unter dem get_header () Zeile hinzufügen:

Sie können das dann verwenden $ animalcat Variable später.

Seitenüberschrift ausgeben

Das Archiv hat derzeit keine Hauptüberschrift. Sie müssen also eine hinzufügen, indem Sie die soeben definierte Variable verwenden.

Nach der Eröffnung

Tag, fügen Sie Folgendes hinzu:

 

Name; ?>

Begriffe für die zweite Taxonomie abrufen

Als Nächstes müssen Sie die Liste der Begriffe für die zweite Taxonomie abrufen. Fügen Sie unter dem soeben hinzugefügten Code Folgendes ein:

 0)); ?>

Dadurch wird eine Liste aller Begriffe abgerufen und in einem Array gespeichert. Durch die Nutzung 'hide_empty' Sie können vermeiden, dass leere Begriffe angezeigt werden. Dies wird jedoch, wie Sie in Kürze sehen werden, lediglich die Abfrage von Begriffen verhindert, die überhaupt keine Beiträge enthalten, nicht jedoch solche, die keine Beiträge mit dem aktuell abgefragten Taxonomie-Begriff haben.

Die Schleife erstellen

Erstellen Sie nun eine Schleife, die für jeden Begriff ausgeführt wird:

 'animal', 'animal_cat' => $ animalcat-> slug, 'habitat' => $ term-> slug); $ query = new WP_Query ($ args); // den Begriffnamen in einem Heading-Tag-Echo ausgeben '

'. $ term-> name. 'Lebensraum

'; // die Posttitel in einem Listenecho ausgeben '
    '; // Startet die Schleife, während ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • '; // setze postdata zur Wiederherstellung der ursprünglichen Abfrage verwenden wp_reset_postdata (); ?>

Ein paar Anmerkungen dazu:

  • Für jeden Begriff wird eine neue Abfrage definiert.
  • Die Argumente für die Abfrage enthalten den Begriff in der zweiten Taxonomie ($ term) und der gerade abgefragte Begriff ($ animalcat).
  • Wenn Ihre Taxonomien nur für einen Beitragstyp gelten, können Sie die Option weglassen 'Post-Typ' Argument, aber ich ziehe es vor, nur für den Fall.
  • Das $ term Variable wird verwendet, um einen Titel für jeden Abschnitt mit auszugeben $ term-> name.

Speichern Sie nun Ihre Vorlagendatei und schauen Sie sich das Taxonomie-Archiv für eines von Ihnen an Tierfamilie Begriffe:

Hinzufügen einer Prüfung auf Beiträge zu jeder Abfrage

In dem Moment, wie Sie sehen können, gibt die Vorlage leere Listen aus. Dies kann leicht behoben werden, indem geprüft wird, ob jede Abfrage Beiträge enthält.

Wickle folgendes um deine Schleife:

if ($ query-> have_posts ()) 

Ihre Schleife sieht nun so aus:

if ($ query-> have_posts ()) // Ausgabe des Begriffsnamens in einem Heading-Tag echo '

'. $ term-> name. 'Lebensraum

'; // die Posttitel in einem Listenecho ausgeben '
    '; // Startet die Schleife, während ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • ';

Dies verhindert, dass WordPress die Schleife ausführt, wenn die Abfrage keine Beiträge enthält, und diese leeren Überschriften entfernt werden. Nun sieht meine Archivseite so aus:

Viel besser!

Erstellen der Vorlagendatei für die zweite Taxonomie

Der letzte Schritt ist das Erstellen einer Vorlagendatei für die Archive der zweiten Taxonomie.

Kopieren Sie Ihre erste Vorlagendatei und benennen Sie sie um taxonomy-habitat.php. Bearbeiten Sie es so, dass die Terminologie korrekt ist. Die Änderungen, die ich an meiner Datei vornehmen muss, sind:

  • Die Kommentare oben in der Datei werden angepasst, damit sie genau sind
  • den Namen des ändern $ animalcat Variable zu Lebensraum $ (Sie können dieses Problem vermeiden, indem Sie der Variablen einen allgemeineren Namen geben - aber nennen Sie sie nicht.) $ term wie du das woanders verwendest)
  • Bearbeiten der

    Überschrift also verwendet es die Lebensraum $ Variable zur Ausgabe des Namens des aktuell abgefragten Begriffs (ich habe hier auch einen erklärenden Text hinzugefügt, der optional ist)

  • Ändern des ersten Parameters der get_terms ()Funktion, so dass es die verwendet animal_cat Begriff, nicht der Lebensraum Begriff.
  • Bearbeiten der Abfrageargumente, Vertauschen der Werte im Wesentlichen für 'animal_cat' und 'Lebensraum'.
  • Bearbeiten der

    Der Inhalt der Schleife bezieht sich auf Familien, nicht auf Lebensräume.

Das bedeutet, dass meine neue Vorlagendatei folgendermaßen aussieht:

   

Lebensraum - Name; ?>

0)); ?> 'animal', 'animal_cat' => $ term-> slug, 'habitat' => $ habitat-> slug); $ query = new WP_Query ($ args); if ($ query-> have_posts ()) // Ausgabe des Begriffsnamens in einem Heading-Tag echo '

'. $ term-> name. 'Familie

'; // die Posttitel in einem Listenecho ausgeben '
    '; // Startet die Schleife, während ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • '; // set postdata zum Zurücksetzen der ursprünglichen Abfrage verwenden wp_reset_postdata (); ?>

Nachdem Sie diese Änderungen vorgenommen haben, speichern Sie Ihre neue Vorlagendatei und überprüfen Sie eines Ihrer Archive:

Sie haben jetzt eine Seite für die zweite Taxonomie, die wie die erste funktioniert.

Zusammenfassung

In diesem Lernprogramm haben Sie eine Methode zum Anzeigen von Daten mit mehreren Taxonomien kennen gelernt. Sie können dies weiter ausführen, indem Sie auf eine von zwei Arten mit einer dritten Taxonomie arbeiten:

  1. Wiederholen Sie den Vorgang zum Abrufen von Begriffen, Definieren einer Abfrage und Ausführen der Schleife für den dritten Begriff nach dem zweiten Begriff, so dass Sie zwei separate Listen haben.
  2. Führen Sie Ihre Daten unter Verwendung aller drei Begriffe zusammen $ term Variable ähnlich wie die Lebensraum $ oder $ animalcat Variable und Hinzufügen eines zusätzlichen für jeden() Aussage in Ihrem bestehenden für jeden() Aussage. Sie müssen dann überlegen, wie Sie die resultierenden Daten mithilfe von Listen oder einem Raster auslegen.

Warum nicht mal probieren??