Suporte » Desenvolvendo com WordPress » Não consigo exibir todos os posts de uma única categoria

  • Resolvido gabrielfz

    (@gabrielfz)


    Olá, pessoal! Estou começando com wordpress e criei uma página para exibição de posts de uma determinada categoria (música) sendo que cada post é uma música diferente. A ideia era listar os posts do tipo música, onde todos os posts estão marcados na categoria música, porém, na hora de exibir no site, só são exibidas algumas músicas e não todas. Alguém já passou por esse problema? Sabe como resolver? Desde já, muito obrigado!

    <?php
    	$posts_slides = new WP_Query(array(
    	'post_type' => 'albuns',
    	'category_name' => 'musica'
    	));
    	while($posts_slides->have_posts()) : $posts_slides->the_post();
    ?>
    	<li class="list-group-item">
                  <?php echo rwmb_meta('titulo-musica'); ?>
    	</li>
    
    <?php endwhile; wp_reset_postdata(); ?>
Visualizando 12 respostas - 1 até 12 (de um total de 12)
  • Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Olá, tudo bem?

    Se você já está na página de categoria, você não deve usar a WP_Query: o WordPress já te oferece o Loop padrão.

    Tente ver como funciona a archive.php ou a category.php do seu tema, se existir.

    Se o Loop padrão não te atender, você deve alterá-lo usando o filtro pre_get_posts.

    Leia mais sobre o Loop aqui:
    https://developer.wordpress.org/themes/basics/the-loop/

    Nesse link você encontra também tudo o que precisa para aprender a desenvolver temas para o WordPress.

    Abraços

    Thread Starter gabrielfz

    (@gabrielfz)

    Não estou na página de categoria, estou tentando fazer uma lista de posts em uma página chamada “page-musica.php”. Isso influencia o loop?

    Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Opa. Nesse caso, você está certo: tem que usar WP_Query sim, pois o Loop padrão dessa página tem relação com a página que possui o slug “musica”.

    Bem… Então temos que criar um loop secundário. Você fez certo.
    Como seu problema é que nem todos os posts aparecem, talvez você queira colocar o parâmetro posts_per_page igual a -1 (isso faz ele retornar todos os posts).

    Uma dica: talvez seja mais interessante criar um Template, assim você pode colocara em quaisquer páginas que achar necessário e não fica preso ao slug ‘musica’. Saiba como criar um template aqui.

    Abraços

    Thread Starter gabrielfz

    (@gabrielfz)

    Mas essa página já faz parte do template page-musica.php, e infelizmente o parâmetro posts_per_page igual a -1 não funcionou. Pode existir algum outro fator (externo ou não externo) que influencie?

    Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Você já está usando um Custom Template Page?
    Se sim, sugiro outro nome, pois a página com o nome page-algumacoisa é chamada quando a página de slug algumacoisa é carregada.

    Dá uma checada na hierarquia de templates:

    Particularmente eu uso a notação template-algumacoisa.php.

    —–

    Mas enfim, deixa isso pra lá hahah
    Vamos para o seu problema.

    O posts_per_page => -1 não funcionou?
    Estranho, pois esses argumentos:

    
    array(
        'post_type'      => 'albuns',
        'category_name'  => 'musica',
        'posts_per_page' => -1,
    )
    

    Significam que você vai pegar todos (-1) os posts do tipo albuns e com a categoria musica.

    Então a menos que algum plugin interfira nessa query, você deveria ver todos os posts publicados.

    Responda-me por favor:

    – Os posts que estão de fora estão nessa categoria mesmo?
    – Os posts que estão de fora são do tipo album?
    – Os posts que estão de fora estão publicados?
    – Essa página está disponível em algum link?

    Abraços

    Thread Starter gabrielfz

    (@gabrielfz)

    Mil desculpas caso eu tenha falado errado, é que eu estou bem no começo kkk

    Acabei de analisar aqui e realmente estou criando páginas e arquivos page-$slug.php.

    Pata testar, apaguei todos os dados do navegador, criei uma página com o nome e slug teste e criei um arquivo com o nome page-teste.php, e coloquei apenas o loop:

    <?php
       $posts_slides = new WP_Query(array(
       ‘post_type’ => ‘albuns’,
       ‘category_name’ => ‘musica’,
       ‘post_per_page’ => -1
       ));
       while($posts_slides->have_posts()) : $posts_slides->the_post();
       ?>
    
       <li class=”list-group-item”>
          <?php echo rwmb_meta(‘titulo-musica’); ?>
       </li>
    
    <?php endwhile; wp_reset_postdata(); ?>

    Porém, o problema de não exibir todos os posts da categoria musica persiste.
    (O único plugin que estou usando é o metabox, para criar campos personalizados)

    • Esta resposta foi modificada 2 anos, 8 meses atrás por gabrielfz.
    • Esta resposta foi modificada 2 anos, 8 meses atrás por gabrielfz.
    Thread Starter gabrielfz

    (@gabrielfz)

    – Os posts que estão de fora estão nessa categoria mesmo?
    Sim!
    – Os posts que estão de fora são do tipo album?
    Não!
    – Os posts que estão de fora estão publicados?
    Sim!
    – Essa página está disponível em algum link?
    Não!

    Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Opa. Então é isso:

    – Os posts que estão de fora são do tipo album?
    Não!

    Você está usando post_type => 'albuns', então só irão retornar posts desse tipo. Se quiser receber mais de um tipo, tem que passar uma array:

    post_type => [ 'albuns', 'outro_post_type' ]

    Abraços

    Thread Starter gabrielfz

    (@gabrielfz)

    Olá, Mário!
    Criei outro post_type com o nome musica-teste e criei 25 posts (sendo cada post uma música) nesse post_type. Porém o erro persiste, pois quando coloco para aparecer todos os posts, só são mostrados apenas 10 (aparentemente o while só roda 10 vezes), e acabei de perceber que opost_per_pagenão interfere, pois fiz um teste colocando'post_per_page' => 3 e mesmo assim foram retornados 10 posts. 🙁

    Segue o código:

    <ul class="list-group list-group-flush">
    	<?php
    		$posts_slides = new WP_Query(array(
    		'post_type' => 'musica-teste',
    		‘category_name’ => ‘musica’,
    		'post_per_page' => 3,
    		));
    		while($posts_slides->have_posts()) : $posts_slides->the_post();
    	?>
    								
    		<li class="list-group-item">
    			<?php echo rwmb_meta('titulo-musica'); ?>
    		</li>
    
    	<?php endwhile; wp_reset_postdata(); ?>
    </ul>
    • Esta resposta foi modificada 2 anos, 8 meses atrás por gabrielfz.
    Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    e acabei de perceber que o post_per_page não interfere, pois fiz um teste colocando 'post_per_page' => 3 e mesmo assim foram retornados 10 posts.

    Opa… então é aquilo que falamos no começo: algum plugin ou tema está interfirindo nessa query.

    Sugiro desativar todos os plugins e ver se o problema persiste. Se persistir, coloque o tema padrão do WordPress e teste novamente. Se não persistir, então é um deles e aí você vai ativando um por um até o problema aparecer de novo.

    Se não quiser fazer isso, pode procurar no código por alguém usando a ação pre_get_posts. É com ela que inserimos modificações nas queries.

    Abraços

    Thread Starter gabrielfz

    (@gabrielfz)

    Consegui! 😀

    O problema estava em Configurações de leitura onde As páginas do blog mostram no máximo estava marcado como apenas 10 posts.

    Muito obrigado pela ajuda e pela paciência! Um forte abraço!

    Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Essa configuração é das listagens padrão.

    Se você está usando o parâmetro posts_per_page corretamente, ele ignora esse valor.

Visualizando 12 respostas - 1 até 12 (de um total de 12)
  • O tópico ‘Não consigo exibir todos os posts de uma única categoria’ está fechado para novas respostas.