Suporte » Temas » Custom Type e Novo Taxonomy – Exibir registros apenas da categoria selecionada

  • Resolvido maykelesser

    (@maykelesser)


    Boa tarde!

    Criei um register_post_type chamado “downloads” e criei categorias para estas utilizando o register_taxonomy() chamado downloads-category.

    No WP-Admin, consegui cadastrar todos meus arquivos e separar eles por categorias. Está funcioando direitinho. Porém, no site, não consegui fazer essa filtragem. Se verem no link que enviei (https://ideia.marfin.co/downloads/), ao clicar em qualquer categoria, nenhum filtro é realizado.

    Não sei aonde errei! Podem me ajudar?

    functions.php

    register_post_type('downloads',
        array(
            'labels' => array(
                'name' => __('Downloads'),
                'featured_image' => __('Imagem Capa'),
                'singular_name' => __('Download'),
            ),
            'taxonomies'  => array('downloads-category'),
            'supports' => array(
            	'title',
            	'editor',
            	'custom-fields',
            	'thumbnail'
            ),
            'menu_icon'   => 'dashicons-category',
            'with_front' => true,
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'downloads'),
        )
    );
    $labels = array(
    	'name' => _x('Categorias', 'taxonomy general name'),
    	'singular_name' => _x('Categoria', 'taxonomy singular name'),
    	'search_items' =>  __('Procurar categoria'),
    	'all_items' => __('Todos'),
    	'edit_item' => __('Editar categoria'), 
    	'update_item' => __('Editar categoria'),
    	'add_new_item' => __('Adicionar categoria'),
    	'new_item_name' => __('Nova categoria')
    );    
    register_taxonomy('downloads-category',array('downloads'), array(
    	'hierarchical' => true,
    	'labels' => $labels,
    	'show_ui' => true,
    	'query_var' => true,
    	'show_in_nav_menus' => true,
    	'rewrite' => array('slug' => 'categoria-de-downloads', 'with_front' => false),
    ));

    archive.php

    <?php get_header(); ?>
    <?php if(is_post_type_archive('downloads')){ ?>
    <section id="conteudo">
        <div class="title">
            <div class="container">
            	<h1>Downloads</h1>
            	<?php if (function_exists('yoast_breadcrumb')){ yoast_breadcrumb('<p id="breadcrumbs">','</p>'); }?>
            </div>
        </div>
        <div class="content-master">
        	<div class="container">
        		<div class="row more-gutter">
        			<aside class="col-sm-3">
        				<?php
    
        					$args = array(
    						    'orderby' => 'name',
    						    'taxonomy'=>'downloads-category',
    						    'parent' => 0
    						);
    						$categories = get_categories($args);
    						foreach ($categories as $category){
    						    echo '<li><a href="'.get_category_link($category->term_id).'">'.$category->name.'</a></li>';
    						}
    
        				?>
        			</aside>
        			<div class="col-sm-9">
        				<?php 
        					$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    						$infoDownload = array(
    							'post_type' => 'downloads', 
    							'paged' => $paged
    						);
    						$resultadoDownload = new WP_Query($infoDownload); 
    						if ($resultadoDownload->have_posts()) :
    						while ($resultadoDownload->have_posts()) : $resultadoDownload->the_post();
    							$postThumb = (has_post_thumbnail()) ? get_the_post_thumbnail_url() : get_stylesheet_directory_uri()."/img/layout/sem-imagem.jpg";
    							$postThumb = "<img src=\"".$postThumb."\" class=\"img-fluid\">";
    						?>
    			    		<div class="row lista-download">
    			    			<div class="col-sm-4">
    								<?php echo $postThumb; ?>
    							</div>
    							<div class="col-sm-8">
    								<h3><?php the_title() ?></h3>
    								<?php the_content(); ?>
    							</div>
    						</div>
    		        	<?php 
    						wp_reset_postdata();
    						endwhile;
    						wpbs_pagination();
    						endif;
    					?>
        			</div>
        		</div>
        	</div>
        </div>
    </section>
    <?php }elseif(is_tax('downloads-category')){ ?>
    <section id="conteudo">
        <div class="title">
            <div class="container">
            	<h1>Nome da categoria</h1>
            	<?php if (function_exists('yoast_breadcrumb')){ yoast_breadcrumb('<p id="breadcrumbs">','</p>'); }?>
            </div>
        </div>
        <div class="content-master">
        	<div class="container">
        		<div class="row more-gutter">
        			<aside class="col-sm-3">
        				<?php
    
        					$args = array(
    						    'orderby' => 'name',
    						    'taxonomy'=>'downloads-category',
    						    'parent' => 0
    						);
    						$categories = get_categories($args);
    						foreach ($categories as $category){
    						    echo '<li><a href="'.get_category_link($category->term_id).'">'.$category->name.'</a></li>';
    						}
    
        				?>
        			</aside>
        			<div class="col-sm-9">
        				<?php 
        					$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    						$infoDownload = array(
    							'post_type' => 'downloads',
    							'tax_query' => array(
    						        array(
    						            'taxonomy'=>'downloads-category',
    						            'field'    => 'slug'
    						        )
    						    ),
    							'paged' => $paged
    						);
    						$resultadoDownload = new WP_Query($infoDownload); 
    						if ($resultadoDownload->have_posts()) :
    						while ($resultadoDownload->have_posts()) : $resultadoDownload->the_post();
    							$postThumb = (has_post_thumbnail()) ? get_the_post_thumbnail_url() : get_stylesheet_directory_uri()."/img/layout/sem-imagem.jpg";
    							$postThumb = "<img src=\"".$postThumb."\" class=\"img-fluid\">";
    						?>
    			    		<div class="row lista-download">
    			    			<div class="col-sm-4">
    								<?php echo $postThumb; ?>
    							</div>
    							<div class="col-sm-8">
    								<h3><?php the_title() ?></h3>
    								<?php the_content(); ?>
    							</div>
    						</div>
    		        	<?php 
    						wp_reset_postdata();
    						endwhile;
    						wpbs_pagination();
    						endif;
    					?>
        			</div>
        		</div>
        	</div>
        </div>
    </section>
    <?php get_footer(); ?>
Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • Moderador Felipe Elia

    (@felipeelia)

    Parece que é porque você não está passando o termo na query. Tente usar

    'tax_query' => array(
    	array(
    		'taxonomy' => 'downloads-category',
    		'field'    => 'term_id',
    		'terms'    => get_queried_object_id(),
    	)
    )

    Só não ficou claro pra mim porque vocẽ está usando uma query personalizada. Por que não usar os posts que o próprio WP já pegou com o have_posts() normal?

    maykelesser

    (@maykelesser)

    Bom dia @felipeelia, tudo bem?
    Alterei como sugeriu e funcionou perfeitamente <3

    Não entendi a sua questão após isso. Fiz dessa maneira, pois foi a maneira que consegui fazer dar certo, hehe. Não conheço outra! Se for mais simples que isso e tão flexível quanto, pode me instruir?

    Moderador Felipe Elia

    (@felipeelia)

    que bom! \o/

    Dentro do elseif(is_tax('downloads-category')) você já garante que está em um arquivo dessa taxonomia, então ao invés do

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $infoDownload = array(
    	'post_type' => 'downloads',
    	'tax_query' => array(
    		array(
    			'taxonomy'=>'downloads-category',
    			'field'    => 'slug'
    		)
    	),
    	'paged' => $paged
    );
    $resultadoDownload = new WP_Query($infoDownload); 
    if ($resultadoDownload->have_posts()) :
    while ($resultadoDownload->have_posts()) : $resultadoDownload->the_post();

    teoricamente vocẽ poderia usar só

    if ( have_posts() ) :
    	while( have_posts() ) : the_post();

    (sim, é bem menos código mesmo).

    Mas veja aí. Se seu código está funcionando isso seria mais para você estudar e tentar um código mais simples mesmo.

    Ah, e não se esqueça de macar o tópico como resolvido! Assim outros usuários com dúvidas parecidas já acham a resposta de forma mais fácil.

    maykelesser

    (@maykelesser)

    Vou fazer o teste aqui! Quanto menos código, sempre melhor!
    Muito obrigado! \o/

Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • O tópico ‘Custom Type e Novo Taxonomy – Exibir registros apenas da categoria selecionada’ está fechado para novas respostas.