Permaliens: type de message personnalisé -> taxonomie personnalisée -> post


39

Je ne parviens pas à utiliser les règles de réécriture de WordPress et je pourrais avoir besoin d'aide.

J'ai un type de message personnalisé appelé _shows_.

Tous les spectacles ont une seule taxonomie personnalisée. La catégorie _show-category_.A _show_n'en aura jamais plus d'une _show-category_.

J'aimerais que mes urls soient routés de cette manière:

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

Ainsi, à titre d'exemple, nous avons un _show-category_"Foo" et un _show_article intitulé "Bar" qui a "Foo" tel quel _show-category_. Je m'attendrais à ce que mon application WordPress ressemble à ceci:

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

J'essaie d'éviter les plugins quand c'est possible, mais je suis ouvert à toute solution.


1
je vous
indique

Réponses:


70

Tout d' abord, enregistrer votre taxonomie et définir l' slugargument rewriteà shows:

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

Ensuite, enregistrez votre type de message et définissez le slug sur shows/%show_category%, et définissez l' has_archiveargument sur shows:

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

Enfin, ajoutez un filtre pour post_type_linksubstituer la catégorie d’émission dans les permaliens d’émission individuels:

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

MODIFIER

Oublié l' has_archiveargument de register_post_typeci-dessus, cela devrait être réglé sur shows.


1
Milo, merci! Le filtre post_type_link était la pièce manquante pour moi. Toute personne lisant ce fil avec le même problème, la seule chose à noter est qu'il y a une petite erreur sur la fonction wpa_show_permalinks, où $ post-> post_type == 'show' devrait en réalité être 'shows'. Merci encore Milo!
Paul T

4
Si vous modifiez une instance WordPress existante, veillez à accéder à Paramètres> Permaliens et à cliquer sur Enregistrer. Les modifications que vous avez apportées à functions.php ne prendront effet que si vous le faites.
Jay Neely

2
Cela a presque fonctionné pour moi dans la mesure où la taxonomie est affichée sur la page de type d'article, le / post_type / taxonomy / est une page légitime (précédemment 404) mais mon / post_type / taxonomy / post vaut 404 '. J'ai remarqué lors de l'enregistrement de la taxonomie au-dessus que "show_category", "show" étaient en cours d'enregistrement, même si seule la show_category est la taxonomie. Je n'enregistre que la taxonomie.
justinavery

4
@Milo un moyen de faire en sorte que cela fonctionne avec des sous-taxes telles que des émissions / taxes / sous-taxes / publications?
Benn

2
J'aurais tellement voulu que cela fonctionne pour moi aussi, mais chaque singulier se termine par un 404 ....
Beee
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.