Permaliens: type d'article personnalisé - taxonomie personnalisée - article

32

Je ne parviens pas à 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_ .

Toutes les émissions 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 URL soient acheminées de la manière suivante:

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

Par exemple, supposons que nous ayons un _show-category_ "Foo" et un post _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 dans la mesure du possible, mais je suis ouvert à toute solution.

    
posée Paul T 01.08.2013 - 18:16
la source

2 réponses

53

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 publication et définissez le slug sur shows/%show_category% , puis définissez 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 des 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

Vous avez oublié l'argument has_archive de register_post_type ci-dessus, qui doit être défini sur shows .

    
réponse donnée Milo 01.08.2013 - 19:44
la source
0

Pour obtenir une taxonomie personnalisée sur une page de publication ou dans une archive, pourquoi ne pas utiliser ce code?

global $wpdb, $post;
    $terms = get_the_terms($post->ID, 'CUSTOM_TEXONOMY_NAME_HERE');
    if (! empty($terms)) {
      foreach ($terms as $term) {
        $url = get_term_link($term->slug, 'CUSTOM_TEXONOMY_NAME_HERE');
        print "<a class='auther_nama' href='{$url}'>{$term->name}</a>";
      }
    }
    
réponse donnée Rohit Kaushik 22.10.2018 - 13:52
la source

Lire d'autres questions sur les étiquettes