J'ai de la difficulté à travailler avec 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 shows ont une seule catégorie de taxonomie personnalisée _show-category_.
Un _show_
n'aura jamais plus d'un _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 article _show_
intitulé "Bar" qui a "Foo" en tant que _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.
Tout d’abord, enregistrez votre taxonomie et définissez l’argument slug
de rewrite
sur 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'argument has_archive
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 à post_type_link
pour remplacer 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 );
EDIT
J'ai oublié l'argument has_archive
de register_post_type
ci-dessus, qui devrait être défini sur shows
.