Einzelne Taxonomie für verschiedene benutzerdefinierte Post-Typen

Ich habe zwei benutzerdefinierte Post-Typen: Bücher und Autoren . Beide haben eine benutzerdefinierte TaxonomieGenres angehängt.

Wie würde ich die Bücher im Fiction- Genre anzeigen?

Wie lauten die URL und der Name der Vorlage?

Ich kann mir zwei Methoden vorstellen , aber sie haben Nachteile. Daher suche ich nach einer Methode, die der WP-Vorlagenhierarchie ähnelt: visit site.com/genre/fiction/ würde dieses Vorlagen- Taxonomie-Genre nennen. php


Methode 1 : Verwenden von benutzerdefinierten Seitenvorlagen Ich würde eine benutzerdefinierte Seitenvorlage erstellen, cpt-genre.php . Dann würde ich für jedes Genre in Büchern eine leere Seite erstellen, mit Slugs wie Bücher-Fiction und so weiter. In der Vorlage würde ich den Slug der Seite lesen, interpretieren und abfragen, um die Bücher im Fiction- Genre zu bekommen.
Ergebnis: Der Zugriff auf site.com/books-fiction würde zu cpt-genre.php führen , und die Vorlage würde die Daten basierend auf dem Slug der Seite anzeigen.
Nachteil: schwer zu verwalten


Methode 2 : Fügen Sie der Taxonomie-URL eine Abfragezeichenfolge hinzu, lesen Sie sie in taxonomy-books.php und taxonomy-authors.php, und ändern Sie WP_Query, um nur die Bücher / Autoren im genannten Genre anzuzeigen.
Ergebnis: Der Zugriff auf site.com/books/?genre=fiction würde zu taxonomy-books.php führen , und die Vorlage würde die Daten basierend auf der Abfragezeichenfolge anzeigen.
Nachteil: Die URL ist nicht sauber und es ist auch nicht SEO-freundlich


Also, irgendwelche anderen Ideen für neue Methoden oder zumindest für Möglichkeiten, die Nachteile der oben genannten Methoden zu mildern?

Solutions Collecting From Web of "Einzelne Taxonomie für verschiedene benutzerdefinierte Post-Typen"

Ich denke, das ist, was Sie suchen … Sie müssen sowohl post_type und tax_query verwenden, um Ihre Abfrage zu filtern

$query = new WP_Query( array( 'post_type' => 'books', // name of post type. 'tax_query' => array( array( 'taxonomy' => 'fiction', // taxonomy name ) ) ) ); while ( $query->have_posts() ) : $query->the_post(); // do stuff here.... endwhile; /** * reset the orignal query * we should use this to reset wp_query */ wp_reset_query(); 

Genauso müssen Sie nur die Autoren pro Genre anzeigen?

Wenn nicht, dann können Sie pre_get_posts und einfach den Autor-Beitragstyp aus den Post-Typen der Abfrage entfernen (oder das Ganze in Bücher is_tax( 'genre' ) ), wenn is_tax( 'genre' ) wahr ist.