Suporte » Desenvolvendo com WordPress » Paginação de CPT em Template Page para exibição de arquivo

  • Moderador Allyson Souza

    (@allysonsouza)


    Olá,

    Gostaria de utilizar uma página, com um template específico, de arquivo para um determinado custom post type, por exemplo Portfolio.

    Nos argumentos da função register_post_type(), defino ‘has_archive’ => false, e então crio uma página com o nome portfolio (slug ‘portfolio’). Funciona perfeitamente. Entretanto, a paginação já não está funcionando muito bem.

    Minha estrutura de permalink é: /%category%/%postname%

    http://www.meusite.com.br/portfolio – Tenho o resultado esperado e a template page é exibida, com minha query corretamente, tudo certo.

    http://www.meusite.com.br/portfolio/page/2 – Erro 404.

    Caso eu defina o parâmetro ‘rewrite’ => false na função register_post_type, a paginação funcionará, porém as singles de portfolio ficarão com uma url: http://www.meusite.com.br/?portfolio=projeto-1

    É isso, gostaria de saber se há alguma solução para isto, ou se esta abordagem que de fato é problemática (o problema tem sido apenas a paginação, o parâmetro ‘has_archive’ => false funciona perfeitamente quando não necessito dela, por isso creio que não seja uma abordagem ruim, mas falte algum detalhe nessa construção)

Visualizando 12 respostas - 1 até 12 (de um total de 12)
  • Moderador Leo Baiano

    (@leobaiano)

    Não sei se entendi direito o que você deseja, mas pedirei que faça o seguinte teste. Delete a página portfólio que você criou, crie um arquivo chamado archive-portfolio.php com o loop padrão do WordPress, vá em permalinks e salve e depois faça um teste.

    Moderador Allyson Souza

    (@allysonsouza)

    Leo, eu justamente não quero utilizar a archive-portfolio.php!

    Eu gostaria de definir o meu post-type sem arquivo, e então fazer meu próprio loop em uma template page, cansei de fazer isso, sempre o faço para posts. Entretanto, para um custom post type ele tem funcionado para uma página, mas não para paginação.

    Moderador Leo Baiano

    (@leobaiano)

    Saquei, como está fazendo o loop e como está fazendo a paginação?

    Moderador Allyson Souza

    (@allysonsouza)

    Criei um Gist de exemplo com o arquivo do loop.

    https://gist.github.com/allysonsouza/61c48cea9db17ed9d12a

    A criação do CPT tem o argumento ‘has_archive’ => false como disse.

    Moderador Leo Baiano

    (@leobaiano)

    Allyson, seu código está todo certinho, deveria funcionar. Então só me resta crer que existe algum bug ou limitação do WordPress para esses casos, vou dar uma pesquisada porque fiquei intrigado.

    Moderador Claudio Sanches

    (@claudiosanches)

    Então, isso é um front-page?
    Porque se for ele não vai ter paged e apenas page, tem falando sobre isso na documentação do get_query_var.

    Não consigo ver um motivo para ter um loop diferente ai assim, acredito que como você deseja personalizar pode ser feito por pre_get_posts, entretanto para usar isso você vai ter que manter o 'has_archive' => true, assim fica bem mais simples de modificar a quantidade e etc.

    No caso de post type já tem o arquivo próprio como archive-POST_TYPE.php, entretanto se por algum motivo você esta fazendo isso dai por um plugin ou algo que realmente precisa usar outro arquivo (porque talvez seria esse o motivo de usar uma página) você ainda pode usar o template_include.

    Moderador Allyson Souza

    (@allysonsouza)

    O motivo: Ter, de uma maneira fácil, uma página com um template específico relacionado ao arquivo de um determinado custom post type, sendo ela responsável pela custom query deste conteúdo.

    Porquê? Para que, de forma fácil, seja possível lidar com o conteúdo relacionado a estes arquivos, como imagens e outros eventuais custom fields que o projeto possa necessitar.

    No nosso blog trabalhei desta forma, usando o mesmo código de exemplo, como ‘paged’ mesmo, porém o slug da página é diferente do post_type, chama-se ‘blog’ (este é o grande problema): http://www.hastedesign.com.br/blog

    No caso gostaria de saber se tem como trabalhar desta forma, definindo ‘has_archive’ => false para utilizar o slug da página como o mesmo do post_type, pelos motivos citados acima.

    Funciona para uma página, como dito, a paginação que não funciona.

    Moderador Claudio Sanches

    (@claudiosanches)

    Você não respondeu pra mim é front-page ou não.
    No site inteiro vai funcionar como paged, mas se for front-page vai ser page apenas.

    Moderador Allyson Souza

    (@allysonsouza)

    Foi mal, não, não é front-page.

    Moderador Allyson Souza

    (@allysonsouza)

    Dei uma boa pesquisa e aparentemente ninguém resolveu mantendo o mesmo slug com paginação ainda, acabei por hora alterando o slug da página para 'portfolios', e mantendo o slug do post_type 'portfolio'.

    Valeu a ajuda!

    Moderador Leo Baiano

    (@leobaiano)

    Pois é Allyson, se me bater com algo sobre isso volto por aqui para compartilhar e peço que faça o mesmo.

    Moderador Allyson Souza

    (@allysonsouza)

    Então Leo, assim que postei o Claudio veio dar uma força e confirmou as supeitas de que era problema no rewrite da url, vou pedir para ele dar sua explicação por aqui e encerrar o tópico. Enfim, não parece algo fácil de alterar, acredito que o melhor seja buscar outras alternativas.

    (Além dos slugs diferentes, poderia criar páginas de configuração no admin para as archives, o que queria evitar, mas parece mais apropriado)

Visualizando 12 respostas - 1 até 12 (de um total de 12)
  • O tópico ‘Paginação de CPT em Template Page para exibição de arquivo’ está fechado para novas respostas.