Isso não deveria ser fácil ?! Tipo de postagem personalizada / taxonomia personalizada permalink

11

Então isso está me deixando absolutamente louco. Passei dias tentando consertar isso e não consigo entender por que isso é tão difícil, pois certamente essa é uma estrutura permalink muito comum!

Examinei centenas de respostas e postagens e nenhuma delas parece resolver o problema.

Eu simplesmente quero essa estrutura:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

Então, eu alcanço o seguinte:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

Sempre que tento algo, obtenho erros 404 ou a paginação não funciona.

Eu não entendo por que isso é tão difícil!

Qualquer ajuda realmente apreciada!

Obrigado

==================================================== ==== ================== INFORMAÇÃO ADICIONAL ==================

Atualmente, estou registrando o tipo de postagem e taxonomia da seguinte maneira:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

Se eu registrar ambos como 'literatura', recebo um 404 na página mysite.com/literature, mas isso exibe meu link permanente como: mysite.com/literature/books/mybook

Depois de seguir o conselho sobre esta pergunta - tipos de postagens, taxonomias e links permanentes personalizados

Eu adicionei isso às minhas funções:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

E alterei meu tipo de postagem para 'slug' => 'literature/%literature_category%' E alterei minha taxonomia para'slug' => 'literature'

Isso funciona muito bem, exceto que na mysite.com/literaturepaginação não funciona, então eu recebo um erro 404 no seguinte URL:

mysite.com/literature/page/2/

fxfuture
fonte
Por curiosidade, o que você tentou até agora?
Matthew Boynes
Essa resposta me fez o mais próximo - wordpress.stackexchange.com/questions/5308/... - mas então não fez trabalho com paginação eo plugin sugeriu não quer trabalhar
fxfuture
Legal, feliz por ter perguntado, isso me salvou algum tempo!
precisa saber é o seguinte

Respostas:

6

Siga os conselhos sobre esta pergunta como você já fez, mas adicione-o ao seu código:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

Por fim, vá para Configurações> Links permanentes e clique em Salvar. Se ainda assim não funcionar, salve seus links permanentes novamente. Às vezes, sinto que você precisa salvá-las duas vezes, mas quem sabe. De qualquer forma, deixe-me saber como você se sai. Observe que a resposta padrão 1 de ciência da computação se aplica: Funciona para mim ... ;-)

Da terra de TMI ...

Para referência, a razão pela qual as páginas não funcionam por padrão é que o WordPress coloca uma regra de reescrita para literatura /% literatura_categoria% /% livro% /% página%, o que faz todo o sentido se você pensar sobre isso. Portanto, seus links permanentes padrão têm estas regras concorrentes nesta ordem:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

Tudo o que realmente estamos fazendo aqui é alterar a ordem desses, desmarcando o último (podemos mantê-lo, mas cada reescrita a seguir tem mais um regex para executar no carregamento da página) e adicioná-lo ao início da matriz.

Curiosidade: se você tiver um "livro" intitulado "página" e ele tiver várias páginas, esse pedido entrará em conflito e as páginas subsequentes não funcionarão!

Matthew Boynes
fonte
Puxa, me ocorreu que minha sintaxe estava errada aqui. Engraçado o suficiente, funciona para mim e quando eu o reparo, não funciona. Eu vou mantê-la e atualizar a minha resposta quando eu descobrir isso ...
Matthew Boynes
Obrigado pela sua ajuda, Matthew. Eu tentei isso e infelizmente não funcionou. Eu adicionei mais informações à minha pergunta, o que espero explicar melhor!
Fxfuture
1
Ok, minhas desculpas pela confusão. Teve um pouco de gás cerebral lá (deve ter tido alguns feijões cerebrais recentemente). Minha resposta foi atualizada e, novamente, funciona para mim. Lembre-se de economizar seus links permanentes.
Matthew Boynes
1
Ah, ok, eu vi sua pergunta atualizada. Portanto, não é que / literatura / ficção / página / 2 não funcione, é que / literatura / página / 2 não funciona, certo? Nesse caso, é uma solução fácil, faremos a mesma coisa em um nível
Matthew Boynes
1
vamos continuar esta discussão no chat
Matthew Boynes 30/01/12