it-swarm.com.de

Permalinks: Benutzerdefinierter Beitragstyp -> Benutzerdefinierte Taxonomie -> Beitrag

Ich habe Probleme mit der Arbeit mit WordPress-Umschreiberegeln und könnte Hilfe gebrauchen.

Ich habe einen benutzerdefinierten Beitragstyp namens _shows_.

Alle Shows haben eine einzelne benutzerdefinierte Taxonomiekategorie _show-category_. Ein _show_ hat niemals mehr als einen _show-category_.

Ich möchte, dass meine URLs wie folgt weitergeleitet werden:

www.mysite.com/shows/  =>  archive-shows.php

www.mysite.com/shows/%category%/ => taxonomy-show-category.php

www.mysite.com/shows/%category%/%postname%/ => single-shows.php

Nehmen wir als Beispiel aus der Praxis an, wir haben einen _show-category_ "Foo" und einen _show_ Post mit dem Titel "Bar", der "Foo" als _show-category_ hat. Ich würde erwarten, dass meine WordPress-App so aussieht:

www.mysite.com/shows/foo/ => shows all posts under the foo category
www.mysite.com/shows/foo/bar => shows the indivual post

Ich versuche, Plugins zu vermeiden, bin aber offen für jede Lösung.

38
Paul T

Zuerst registriere deine Taxonomie und setze das Argument slug von rewrite auf shows:

register_taxonomy(
    'show_category',
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
        // your other args...
    )
);

Als nächstes registriere deinen Beitragstyp und setze den Slug auf shows/%show_category% und das Argument has_archive auf shows:

register_post_type(
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows/%show_category%', 'with_front' => false ),
        'has_archive' => 'shows',
        // your other args...
    )
);

Zuletzt fügen Sie post_type_link einen Filter hinzu, um die Show-Kategorie in einzelne Show-Permalinks zu ersetzen:

function wpa_show_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'show' ){
        $terms = wp_get_object_terms( $post->ID, 'show_category' );
        if( $terms ){
            return str_replace( '%show_category%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );

EDIT

Haben Sie das has_archive-Argument von register_post_type vergessen, das auf shows gesetzt werden sollte.

65
Milo