Adiciona extensão .html (ponto HTML) a tipos de postagem personalizados

9

Existe alguma maneira de adicionar a extensão .html aos tipos de postagem personalizados sem o plug-in ?

Para postagens, posso usar /%postname.html nas configurações de permalink

Para páginas que posso usar:

add_action('init', 'change_page_permalink', -1);
function change_page_permalink() {
    global $wp_rewrite;
    if ( strstr($wp_rewrite->get_page_permastruct(), '.html') != '.html' ) 
        $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}

Para tipos de postagens personalizadas

Existe algum pedaço de código semelhante ao acima que me permita alterar ou adicionar o .html na URL do tipo de postagem personalizada?

    
por user983248 19.07.2012 / 15:47

3 respostas

7

Isso parece funcionar:

Crie as regras de regravação como post-type/post-name.html . Você pode usar arrays para criar as regras para apenas alguns tipos de post, em vez de fazê-lo para todos eles.

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array();
    foreach ( get_post_types() as $t )
        $new_rules[ $t . '/([^/]+)\.html$' ] = 'index.php?post_type=' . $t . '&name=$matches[1]';
    return $new_rules + $rules;
}

Formate a nova estrutura de permalink para esses tipos de postagem.

add_filter( 'post_type_link', 'custom_post_permalink' ); // for cpt post_type_link (rather than post_link)
function custom_post_permalink ( $post_link ) {
    global $post;
    $type = get_post_type( $post->ID );
    return home_url( $type . '/' . $post->post_name . '.html' );
}

Em seguida, pare de redirecionar as URLs canônicas para remover a barra final. Isso pode precisar de mais algum trabalho, pois você provavelmente desejará manter o redirecionamento para a maioria dos casos.

add_filter( 'redirect_canonical', '__return_false' );

Como outros disseram por aqui, depois de fazer o acima, você precisará liberar as regras, e isso é possível visitando a página de admin options-permalink.php em Dashboard -> Settings -> Permalinks .

    
por vmassuchetto 28.07.2012 / 06:41
4

Você pode adicionar uma regra de reconfiguração para isso que substitui os permalinks incorporados, por exemplo, para um tipo de mensagem personalizada "produto" ...

add_action('init', 'add_html_ext_to_custom_post_types');
function add_html_ext_to_custom_post_types() {
    add_rewrite_rule('^product/([^/]+)\.html', 'index.php?product=$matches[1]', 'top');
}

(Não se esqueça de liberar suas regras salvando novamente seus permalinks ou usando flush_rules da maneira @toscho notes acima).

Advertências

  • Eu não acho que funções como the_permalink() usariam isso, então você pode ter que adicionar um filtro para post_link para pegar esses links. Você também pode adicionar ao filtro redirect_canonical para redirecionar os permalinks padrão, de modo que / product / foo e / product / foo / redirecione para /product/foo.html.
  • Você precisaria adicionar novas regras para outros URLs usados pelo seu site, como URLs de feeds, páginas subsequentes, trackbacks etc. O código acima funcionaria apenas para a página principal Tipo de postagem personalizada.
por Matthew Boynes 27.07.2012 / 17:45
2

Se você preferir um plug-in do WordPress para lidar com o trabalho, confira Permalinks personalizados de tipo de postagem no repositório de plugins do WordPress. Testado no WordPress 3.4.1 e funciona perfeitamente.

Depois de ativar o plug-in, basta acessar o Painel - > Configurações - > Permalinks. Você pode adicionar reescritas específicas para cada tipo de postagem personalizada registrada.

    
por Michael Ecklund 19.07.2012 / 16:03