Suporte » Temas » Mostrar apenas posts da categoria selecionada na Category.php

  • Olá pessoal, bom, sou meio leigo em php, criei uma página que se chama category.php, onde deveria ser mostrado apenas os posts da categoria que eu selecionei no menu de navegação. Mas não é isso que acontece! Acaba por mostrar todas as categorias do meu custom post type. Segue o código:

    <?php get_header(); ?>
        <div id="info">
        	<h2><?php single_cat_title(); ?></h2>
            <div class="breadcrumbs">
            <?php if(function_exists('bcn_display'))
    		{
    			bcn_display();
    		}?>
            </div>
        </div>
    	<div id="conteudo">
            <div id="lateral">
                <h2>Categorias</h2>
                <div id="categorias">
    			<?php $args = array(
    				'orderby'            => 'name',
    				'order'              => 'ASC',
    				'title_li'           => __( '' ),
    			); ?>
    			<ul>
    				<?php wp_list_categories( $args ); ?>
    			</ul>
                </div>
            </div>
            <div id="ultimos-produtos">
    			<h2>Últimos Produtos</h2>
    			<?php $loop = new WP_Query( array( 'post_type' => 'produtos', 'posts_per_page' => 5 ) );
    			while ( $loop->have_posts() ) : $loop->the_post(); ?>
    			<div class="produto-item">
    				<div class="titulo-produto">
    					<h3><?php the_title(); ?> - Cód.: <?php $key="_codigo_produtos"; echo get_post_meta($post->ID, $key, true); ?></h3>
    				</div>
    				<div class="categoria-produto">
    				<?php
    				$categoria = get_the_category();
    				$nomeCategoria = $categoria[0]->cat_name;
    				echo $nomeCategoria;
    				?>
    				</div>
    				<div class="descricao-produto">
    					<p><?php the_content(); ?></p>
    				</div>
    				<div class="preco-produto">R$ <?php echo get_post_meta($post->ID, '_valor_produtos', true); ?></div>
    			</div>
    			<?php endwhile ?>
            </div>
    	</div><!-- FIM CONTEUDO -->
    <?php get_footer(); ?>

    Qual alteração devo fazer para que só seja exibido os posts da categoria da página?? Obrigado.

Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • Você vai precisar setar o ID da categoria que você quer que apareça. Do jeito que esta o código ele esta chamando todas as categorias.

    Thread Starter fccoelho7

    (@fccoelho7)

    Sim, eu quero setar a categoria da página que eu estiver, como faço??

    <?php $loop = new WP_Query( array( 'post_type' => 'produtos', 'posts_per_page' => 5, 'category_name' => 'slug_da_cagoria' ) );

    Tente assim, acredito que funcionará!

    Marlon

    (@marlonlamancio)

    O que está acontecendo é o seguinte: antes do WP chegar nesse template ele já executou a query principal com base na url requisitada e armazenou na variável global $wp_query. Ou seja se o usuário requisitou http://www.seusite.com/categoria o WP já sabe que ele quer um arquivo com todos os posts associados a essa categoria antes mesmo de carregar seu tema!

    Quando ele chega no seu template no ponto $loop = new WP_Query(... vai ser gerada uma nova query e armazenada na variável $loop, ou seja, não é mais a query principal (essa forma é usada para criar queries secundárias), então ele não sabe qual categoria deverá exibir.

    A forma ideal, mas não mais correta, é alterar a query principal usando o filtro pre_get_posts declarando a função quer irá manipular isso no functions.php, mas é melhor ter um conhecimento intermediário para não ocasionar outros problemas.

    A forma mais simples de fazê-lo no próprio template é usando a função query_posts().

    Tente substituir o trecho:

    $loop = new WP_Query( array( 'post_type' => 'produtos', 'posts_per_page' => 5 ) );
    while ( $loop->have_posts() ) : $loop->the_post();

    Para:

    query_posts( array( 'post_type' => 'produtos', 'posts_per_page' => 5 ) );
    while ( have_posts() ) : the_post();

    Como o WP já sabe qual é a categoria do arquivo não precisa passar nos argumentos.

    Se não funcionar podemos tentar outras alternativas. Boa sorte!

    Obs.: pelo código que postou está faltando um ponto-e-vírgula no final da declaração endwhile.

Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • O tópico ‘Mostrar apenas posts da categoria selecionada na Category.php’ está fechado para novas respostas.