Wie kann ich ein Archiv von nur einer Kategorie meines benutzerdefinierten Post-Typs anzeigen?

Dies unterscheidet sich von der Frage: Wie kann ich Kategorien meines benutzerdefinierten Beitragstyps anzeigen?

Ich habe einen benutzerdefinierten Beitragstyp – Podcasts. Ich habe die Taxonomie “category” hinzugefügt, da ich möchte, dass meine “Podcasts” die Taxonomie der Kategorie mit meinen Posts teilen. Ich habe eine Archivseite (archive-podcasts.php), die die Podcasts auf der URL / Podcasts / zeigt , aber es zeigt alle Kategorien . Ich möchte meine Podcasts einzeln in einer Kategorie anzeigen, z. B. unter mysite.com/podcasts/category/mycategory/

oder noch besser: mysite.com/category/mycategory/podcasts/

Im Idealfall würde es meine vorhandene Archiv-podcasts.php Vorlage verwenden.

Hier ist meine benutzerdefinierte Post-Typ-Erstellung:

function podcast_post_type() { // Set UI labels for Podcast post Type $labels = array( //redacted my labels because they aren't important here. ); // Set other options for Podcast post Type $args = array( 'label' => __( 'podcasts', 'understrap' ), 'description' => __( 'Podcasts', 'understrap' ), 'labels' => $labels, // Features this CPT supports in Post Editor 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ), // You can associate this CPT with a taxonomy or custom taxonomy. 'taxonomies' => array( 'category' ), /* A hierarchical CPT is like Pages and can have * Parent and child items. A non-hierarchical CPT * is like Posts. */ 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'post', ); // Registering your Podcast post Type register_post_type( 'podcasts', $args ); } 

Der folgende Code schien vielversprechend, funktionierte aber nicht:

 add_action('init', 'category_cpt_rewrites'); function category_cpt_rewrites() { $custom_post_types = array('podcasts'); //some example post types foreach ( $custom_post_types as $post_type ) { $rule = '^' . $post_type . '/category/(.+?)/?$'; $rewrite = 'index.php?post_type=' . $post_type . '&category_name=$matches[1]'; add_rewrite_rule($rule,$rewrite,'top'); } } 

Ich habe tatsächlich erwartet, dass dies automatisch funktionieren würde – dass, wenn ich die Kategorisierungstaxonomie zu meinem Posttyp hinzufüge, ich dachte, dass WordPress eine URL hätte, wo ich auf meine Podcast-Kategorien zugreifen könnte.

Ich habe viel Zeit verloren und es scheint, als sollte es einfach sein – jede Hilfe wird geschätzt!

Solutions Collecting From Web of "Wie kann ich ein Archiv von nur einer Kategorie meines benutzerdefinierten Post-Typs anzeigen?"

Probieren Sie dies aus und lassen Sie uns wissen, ob es funktioniert:

function custom_category_rewrite() { /** * Here you build an array containing the post type keys that you want * the rule to work for. */ $custom_post_types = array('podcast'); foreach ( $custom_post_types as $post_type ) { /** * Adds rewrite rule which will rewrite sth like http://yoursite.com/podcast/category/category-name/ to * http://yoursite.com/index.php?post_type=podcast&category_name=category-name */ add_rewrite_rule( "^$post_type/category/(.+)/?$", 'index.php?post_type=' . $post_type . '&category_name=$matches[1]', 'top' ); } flush_rewrite_rules(); } add_action( 'init', 'custom_category_rewrite' );
function custom_category_rewrite() { /** * Here you build an array containing the post type keys that you want * the rule to work for. */ $custom_post_types = array('podcast'); foreach ( $custom_post_types as $post_type ) { /** * Adds rewrite rule which will rewrite sth like http://yoursite.com/podcast/category/category-name/ to * http://yoursite.com/index.php?post_type=podcast&category_name=category-name */ add_rewrite_rule( "^$post_type/category/(.+)/?$", 'index.php?post_type=' . $post_type . '&category_name=$matches[1]', 'top' ); } flush_rewrite_rules(); } add_action( 'init', 'custom_category_rewrite' ); 

Setzen Sie den Code in Ihre functions.php.

Beachten Sie die Kommentare im Snippet.

Versuchen Sie, auf etwas wie http://yoursite.com/podcast/category/category-name/ zuzugreifen, um einen Test durchzuführen.