Как я могу отобразить архив только одной категории моего настраиваемого типа сообщений?

Это отличается от вопроса: как отображать категории моего пользовательского типа сообщений?

У меня есть настраиваемый тип сообщений – подкасты. Я добавил категорию «таксономия», так как хочу, чтобы мои «подкасты» делились таксономией «категории» с моими сообщениями. У меня есть страница архива (archive-podcasts.php), которая отображает подкасты в url / podcasts /, но показывает все категории . Я хотел бы показывать мои подкасты в одной категории за раз , например, в mysite.com/podcasts/category/mycategory/

или даже лучше: mysite.com/category/mycategory/podcasts/

В идеале он использовал бы мой существующий шаблон archive-podcasts.php.

Вот мое собственное создание типа сообщения:

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 ); } 

Следующий код выглядел многообещающим, но не работал:

 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'); } } 

Я действительно ожидал, что это сработает автоматически – что добавив таксономию категории к моему типу сообщения, я подумал, что у WordPress будет URL-адрес, где я мог бы получить доступ к моим категориям подкастов.

Я потерял много времени, и кажется, что это должно быть просто – любая помощь ценится!

Попробуйте это и сообщите нам, если это сработает:

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' ); 

Поместите код в свои functions.php.

Обратите внимание на комментарии по фрагменту.

Попробуйте получить доступ к чему-то вроде http://yoursite.com/podcast/category/category-name/ для проведения теста.