Permalinks: tipo de postagem personalizada - taxonomia personalizada - postagem

32

Estou com problemas para trabalhar com as regras de reescrita do WordPress e posso usar alguma ajuda.

Eu tenho um tipo de postagem personalizada chamado _shows_ .

Todos os mostram que tem uma única categoria de taxonomia personalizada _show-category_. A _show_ nunca terá mais de um _show-category_ .

Gostaria que meus URLs fossem encaminhados dessa maneira:

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

Então, como um exemplo do mundo real, digamos que temos um _show-category_ "Foo" e um _show_ post intitulado "Bar" que tem "Foo", pois é _show-category_ . Eu esperaria que meu aplicativo WordPress se parecesse com isso:

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

Eu tento evitar plugins quando possível, mas estou aberto a qualquer solução.

    
por Paul T 01.08.2013 / 18:16
fonte

2 respostas

53

Primeiro, registre sua taxonomia e defina o argumento slug de rewrite to shows :

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

Em seguida, registre o tipo de postagem e defina o slug como shows/%show_category% e defina has_archive como shows :

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

Por último, adicione um filtro a post_type_link para substituir a categoria de exibição em permalinks de apresentação individuais:

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

EDITAR

Esqueceu o argumento has_archive de register_post_type acima, que deve ser definido como shows .

    
por Milo 01.08.2013 / 19:44
fonte
0

Para obter uma taxonomia personalizada na página da postagem ou arquivar por que não usou este código?

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>";
      }
    }
    
por Rohit Kaushik 22.10.2018 / 13:52
fonte