Incluindo categoria base em um post permalink resulta em 404

6

Eu tenho página inicial estática e página separada /news/ como a página Postagens. Eu gostaria de ter os URLs de postagem única assim:

www.example.com/news/categoryname/subcategory/postname/

e para os arquivos da categoria:

www.example.com/news/categoryname/

O que eu já tentei:

  • Se eu adicionar news como minha base de categoria e /news/%category%/%postname%/ como a estrutura permalink personalizada, obtenho as URLs desejadas, mas também o 404 erro para postagens únicas (ambas com news/ no URL e sem ele). Todas as outras páginas (por exemplo, arquivos de categoria, páginas etc.) estão acessíveis.

  • Se eu deixar vazios e permalinks da base da categoria como /news/%category%/%postname%/ , há erros não 404 , mas as URLs da categoria contêm adicionalmente o padrão category slug, assim: www.example.com/news/category/categoryname/

  • Se eu usar plugins para remover a base de categorias padrão ou apenas definir base de categoria para . , ela será removida junto com a news part

  • Se eu definir permalinks como /%category%/%postname%/ e adicionar somente a categoria base news , também haverá erros no 404 , mas os links para as postagens não começarão com news : www.example.com/categoryname/subcategory/postname/

Existem algumas perguntas sem resposta semelhantes: Postagens que não aparecem com categoria base e subcategorias e wordpress permalinks tweeks

    
por semyonfilippov 14.07.2012 / 08:29

4 respostas

3

Voltei a este problema recentemente e encontrei a solução finalmente! Pode ou não funcionar para você - há dois casos possíveis:

  1. Se algumas postagens do seu site forem colocadas em categorias pai e algumas - em subcategorias (categorias filho), ou se as categorias tiverem níveis de aninhamento diferentes (algumas categorias pai têm apenas subcategorias e outras - subcategorias) não há solução . É impossível distinguir news/category/post-name/ de news/category/subcategory/ com regex nas regras de reescrita.

  2. Se você fixou o nível de aninhamento para todas as categorias e postou apenas nas subcategorias de último nível, então você está com sorte! Existe uma solução bastante simples :

O motivo dessas 404 páginas com news na estrutura de base de categorias e de permalink customizada é que a regra de reescrita interna de categoria prevalece sobre as regras de estrutura de permalink. Então, news/category/subcategory/postname/ é interpretado como index.php?category_name=category/subcategory/postname e, obviamente, o WordPress não consegue encontrar essa categoria, retornando a página 404.

O que você precisa fazer é adicionar uma nova regra de reescrita na lista de regras. Coloque este código no seu functions.php ou onde você achar adequado:

add_action( 'init', 'wpa58471_category_base' );
function wpa58471_category_base() {
    // Remember to flush the rules once manually after you added this code!
    add_rewrite_rule(
        // The regex to match the incoming URL
        'news/([^/]+)/([^/]+)/([^/]+)(/[0-9]+)?/?$',
        // The resulting internal URL
        'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]',
        // Add the rule to the top of the rewrite list
        'top' );
}

e, em seguida, atualize a estrutura do permalink da sua página de Opções Gerais do WordPress. O código acima é para aninhamento de dois níveis, se você tiver mais ou menos estrutura de categorias aninhadas, edite a regex e o URL resultante de acordo.

P.S. graças aos contribuidores destas respostas úteis: ajuda com add_rewrite_rule e ferramenta para analisar regras de reescrita .

    
por semyonfilippov 15.09.2012 / 09:28
3

Você só precisa adicionar "/". depois da base da categoria:

Categoria base: news/. (/. é necessário, pois evita 404s para postagem).

Isso funcionou perfeitamente para mim:)

EDIT: este campo irá remover barras à direita ou a esquerda, a menos que você inclua o "."

    
por Piotr Markiełaŭ 30.05.2017 / 01:16
0

Estrutura personalizada de permalink: /media/%category%/%postname%/ Base da categoria: .

Trabalhei para mim, o WordPress 3.4.1, sem nenhum plug-in relacionado.

Atualização: mais tarde, percebi que wp_list_categories envia links sem "mídia" na URL. Mas as postagens são acessíveis com a estrutura de URL desejada e os arquivos de categorias estão no lugar certo. Agora estou procurando mudar o comportamento de wp_list_categories.

    
por Lev Eidinov 22.08.2012 / 07:40
0

É melhor postar um comentário, mas não posso por enquanto. Seu código funciona perfeitamente, mas se você não quiser quebrar os feeds RSS por categoria, ele deve ficar assim:

add_action( 'init', 'wpa58471_category_base' );
function wpa58471_category_base() {
// Remember to flush the rules once manually after you added this code!
    add_rewrite_rule(
    // The regex to match the incoming URL
    'news/([^/]+)/([^/]+)/([^/][^f][^e][^e][^d]+)(/[0-9]+)?/?$', //here my changes to exclude 'feed'
    // The resulting internal URL
    'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]',
    // Add the rule to the top of the rewrite list
    'top' );
}

De qualquer forma, obrigado por um ótimo exemplo de código. :)

    
por talonkingvskg 19.01.2015 / 01:55