it-swarm.com.de

Wie kann ich ein Archiv nur einer Kategorie meines benutzerdefinierten Beitragstyps anzeigen?

Dies unterscheidet sich von der Frage: Wie zeige ich Kategorien meines benutzerdefinierten Beitragstyps an?

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

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

Idealerweise würde ich meine vorhandene Vorlage archive-podcasts.php verwenden.

Hier ist meine Erstellung eines benutzerdefinierten Beitragstyps:

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

Eigentlich hätte ich erwartet, dass dies automatisch funktioniert - indem ich die Taxonomie "Kategorie" zu meinem Beitragstyp hinzufügte, dachte ich, Wordpress hätte eine URL, über die ich auf meine Podcast-Kategorien zugreifen könnte.

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

1
Jordan Davis

Probieren Sie es aus und teilen Sie uns mit, 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' );

Gib den Code in deine functions.php ein.

Beachten Sie die Kommentare im Snippet.

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

2
filipecsweb