Benutzerdefinierte Template-Taxonomie

Ich habe 3 benutzerdefinierte Post-Typen – Events, Musik und Video. Ich habe benutzerdefinierte Artikelseiten für diese drei Post-Typen, da sie auf einer einzelnen Archivseite aufgebläht würden. Also habe ich:

  1. Archiv-Ereignisse.php
  2. Archiv-Musik.php
  3. archiv-video.php

Wenn auf eine Taxonomie geklickt wird (Tag oder Kategorie), wird standardmäßig die Standardarchivseite verwendet. Um dies zu korrigieren, habe ich benutzerdefinierte Taxonomie-Vorlagen eingerichtet, dh. taxonomy-tagevents.php . Das funktioniert perfekt. Meine Frage ist jedoch, ich nehme an, es gibt einen besseren Weg, dies zu tun, so habe ich nicht 3 Kopien Taxonomie- (benutzerdefinierte Taxonomie). Gibt es eine Möglichkeit, die Taxonomie auf die Archivseite des benutzerdefinierten Post-Typs zu leiten?

AKTUALISIEREN

  _x( 'Music', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Music', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Music', 'text_domain' ), 'parent_item_colon' => __( 'Parent Music:', 'text_domain' ), 'all_items' => __( 'All Music', 'text_domain' ), 'view_item' => __( 'View Music', 'text_domain' ), 'add_new_item' => __( 'Add New Music Tracks', 'text_domain' ), 'add_new' => __( 'New Music Tracks', 'text_domain' ), 'edit_item' => __( 'Edit Music', 'text_domain' ), 'update_item' => __( 'Update Music', 'text_domain' ), 'search_items' => __( 'Search Music', 'text_domain' ), 'not_found' => __( 'No Music found', 'text_domain' ), 'not_found_in_trash' => __( 'No Music found in Trash', 'text_domain' ), ); $args = array( 'label' => __( 'Music', 'text_domain' ), 'description' => __( 'Music information pages', 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail', 'comments', 'revisions', ), 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'menu_icon' => '', 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'page', ); register_post_type( 'Music', $args ); // Initialize Taxonomy Labels $labels = array( 'name' => _x( 'Categories', 'taxonomy general name', 'text_domain' ), 'singular_name' => _x( 'Category', 'taxonomy singular name', 'text_domain' ), 'search_items' => __( 'Search Types', 'text_domain' ), 'all_items' => __( 'All Categories', 'text_domain' ), 'parent_item' => __( 'Parent Category', 'text_domain' ), 'parent_item_colon' => __( 'Parent Category:', 'text_domain' ), 'edit_item' => __( 'Edit Categories', 'text_domain' ), 'update_item' => __( 'Update Category', 'text_domain' ), 'add_new_item' => __( 'Add New Category', 'text_domain' ), 'new_item_name' => __( 'New Category', 'text_domain' ), ); // Register Custom Taxonomy register_taxonomy('tagmusic',array('music'), array( 'hierarchical' => true, // define whether to use a system like tags or categories 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'cat-music' ), )); } // Hook into the 'init' action add_action( 'init', 'custom_post_type_music', 0 ); 

Solutions Collecting From Web of "Benutzerdefinierte Template-Taxonomie"

Wenn ich Ihre Frage richtig verstehe, möchten Sie die Code-Duplizierung zwischen den drei CPT-Archiv- und drei Taxonomie-Vorlagendateien vermeiden.

Wenn der Punkt in erster Linie die Vermeidung von Code-Duplizierung ist (dh DRY – Do not Repeat Yourself), würde ich empfehlen, Vorlagen-Teildateien für den Loop-Inhalt für jede CPT zu erstellen:

  • content-{cpt1}.php
  • content-{cpt2}.php
  • content-{cpt3}.php

Sie benötigen weiterhin die Vorlagendateien für die CPT-Archive und die Taxonomie-Indizes:

  • archive-{cpt1}.php
  • taxonomy-{taxonomy1}.php
  • archive-{cpt2}.php
  • taxonomy-{taxonomy2}.php
  • archive-{cpt2}.php
  • taxonomy-{taxonomy2}.php

Ersetzen Sie dann innerhalb jeder dieser Dateien das Loop-Markup durch die entsprechende Template-Part-Datei. Zum Beispiel könnte archive-{cpt1}.php und taxonomy-{taxonomy1}.php aussehen:

 < ?php get_header(); get_template_part( 'content', 'cpt1' ); get_footer(); ?> 

Das ist die einfachste Methode. Es gibt jedoch eine Methode, die weniger Vorlagen- und Vorlageteildateien verwendet: filter template_include (oder Einhängen in template_redirect ), um WordPress mitzuteilen, welche Vorlagendatei verwendet werden soll.

Erstellen Sie zunächst drei Vorlagendateien, eine für jede CPT / Taxonomie:

  • template-cpt1.php
  • template-cpt2.php
  • template-cpt3.php

(Beachten Sie, dass es sich um vollständige Vorlagendateien – Kopfzeile, Inhalt und Fußzeile – und nicht nur um Vorlagenteildateien handelt.)

Dann sagen Sie WordPress, wann Sie sie verwenden sollen.

Beispielsweise:

 function wpse129011_include_cpt_templates( $template ) { // CPT 1 archive index or CPT 1 taxonomy index if ( is_post_type_archive( 'cpt1' || is_tax( 'taxonomy1' ) { return get_template_directory() . '/template-cpt1.php'; } // CPT 2 archive index or CPT 2 taxonomy index else if ( is_post_type_archive( 'cpt2' || is_tax( 'taxonomy2' ) { return get_template_directory() . '/template-cpt2.php'; } // CPT 3 archive index or CPT 3 taxonomy index else if ( is_post_type_archive( 'cpt3' || is_tax( 'taxonomy3' ) { return get_template_directory() . '/template-cpt3.php'; } return $template; } add_filter( 'template_include', 'wpse129011_include_cpt_templates' ); 

Sie können Unterstützung zum Erstellen benutzerdefinierter Taxonomiearten hinzufügen und eine Vorlage hinzufügen, die für eine unbegrenzte Anzahl von Taxonomien funktioniert.

Hier ist der Code, den ich verwende, um einen CPT zu erstellen, der auch die Erstellung von unbegrenzten benutzerdefinierten Taxonomie-Typen unterstützt.

Hier ist der vollständige Code, der auch Code zum Erstellen eines benutzerdefinierten Beitragstyps in einem beliebigen Thema enthält. https://wordpress.stackexchange.com/a/128544/9884

 add_action( 'init', 'create_cpt_taxonomy_types' ); function create_cpt_taxonomy_types() { register_taxonomy( 'article-type', 'news', array( 'labels' => array( 'name' => _x( 'Taxonomy Types', 'taxonomy general name', 'theme' ), 'add_new_item' => __( 'Add New Taxonomy Type', 'theme' ), 'new_item_name' => __( 'New Taxonomy Type', 'theme' ), ), 'exclude_from_search' => true, 'has_archive' => true, 'hierarchical' => true, 'rewrite' => array( 'slug' => 'article-type', 'with_front' => false ), 'show_ui' => true, 'show_tagcloud' => false, )); } 

Sie können diesen Code mit 1 taxonomy-cpt-type.php Vorlage verwenden, und Sie brauchen nur einen.