Suporte » Desenvolvendo com WordPress » Mostrar apenas uma vez a taxonomia com get_the_terms

  • Resolvido sdcom

    (@sdcom)


    Boa tarde pessoal,

    Preciso de uma ajuda, tentarei explicar o mais breve possível:

    Eu tenho um CPT chamado (Catálogo). Nele tenho as categorias (Alfa-Romeo, BMW, Citroen…) e um Custom Taxonomy chamado (Modelo). O que acontece é o seguinte, dentro do arquivo category.php eu chamo para listar o Custom Taxonomy o seguinte código:

    
    $terms = get_the_terms( $post->ID , 'modelo' );
    if ( $terms != null ){
    foreach( $terms as $term ) {
    $term_link = get_term_link( $term, 'modelo' );
    echo '<div class="col-md-3 col-sm-12">';
    echo '<div class="product-box">';
    echo '<div class="product-info">';
    echo '<span class="price"><ins>MODELO</ins></span>';
    echo '<h5 itemprop="headline"><a href="' . $term_link . '">' . $term->name . '</a></h5>';
    echo '</div>';
    echo '</div>';
    echo '</div>';
    unset($term); } }
    

    Está funcionando em partes, explico o porque. Se existe apenas 1 Post com determinada Custom Taxonomy, fica perfeito, ele mostra apenas 1 vez o nome da Custom Taxonomy na lista no front-end. Mas se eu tenho por exemplo, 2 Posts com a mesma Custom Taxonomy, ele repete no front-end duas vezes o nome da Custom Taxonomy na lista. Eu preciso que mostre apenas 1 vez o nome da Custom Taxonomy.

    • Este tópico foi modificado 3 months atrás por  Felipe Elia. Motivo: edição de código
Visualizando 10 respostas - 16 até 25 (de um total de 25)
  • Moderador Felipe Elia

    (@felipeelia)

    Você vai precisar aumentar a quantidade de posts por página (o padrão é 10). Você pode tentar usar um código como esse aqui no functions.php do seu tema:

    
    function change_category_posts_per_page( $query ) {
    	if ( ! is_admin() && $query->is_main_query() && $query->is_tax( 'modelo' ) ) {
    		$query->set( 'posts_per_page', '-1' );
    	}
    }
    add_action( 'pre_get_posts', 'change_category_posts_per_page' );
    

    Não esquece de voltar e dizer se funcionou, beleza?

    Moderador Felipe Elia

    (@felipeelia)

    Agora que eu vi sua resposta usando “query_posts”. Em termos de desempenho isso não é bom. Para tirar o limite de páginas você pode passar -1 ao invés de um número muito alto também.

    Há algum tempo escrevi sobre query_posts, se quiser saber um pouco mais sobre o assunto: https://felipeelia.com.br/wordpress-o-que-voce-precisa-saber-sobre-wp_query-e-query_posts/ 🙂

    Olá Felipe,

    O código para colocar no functions.php não funcionou.
    O problema volta novamente.
    Poxa, com certeza irei ler sim. Bacana, já está nos meus favoritos.

    Moderador Felipe Elia

    (@felipeelia)

    Provavelmente é o && $query->is_tax( 'modelo' ).

    Tente trocar o if por
    if ( ! is_admin() && $query->is_main_query() && $query->is_category() ) {
    que deve funcionar 🙂

    Agora sim Felipe, funcionando corretamente.

    Mais uma vez, muito obrigado!

    Boa tarde Felipe,

    Depois dessas alterações, me deparei com mais uma dúvida.
    Quando clico no Modelo A3, existem 15 produtos. Eles são listados todos de uma uma vez. Até aqui tranquilo, é o esperado. Mas, gostaria de incluir uma paginação, limitando por exemplo 9 produtos por página. Já utilizei algumas “soluções”, porém sem resultado. Consegui limitar os 9 produtos, e fazer aparecer a paginação. Mas 2 problemas acontecem: um deles é o famoso 404 qdo clico para ir a próxima página, e outro, é que mostra os mesmos produtos do A3, dentro dos outros modelos, como por exemplo, o A4 deveria mostrar os produtos dele, mas com essa modificação que fiz, ele mostra os produtos do A3.

    Veja como está meu código e veja o que estou fazendo de errado:

    https://pastebin.com/4f5200yR

    Felipe, consegui resolver o problema.

    Veja o que fiz:

    function limit_archive_posts($query){
    if ($query->is_archive) {
    $query->set(‘posts_per_page’, 9);
    }
    return $query;
    }

    add_filter(‘pre_get_posts’, ‘limit_archive_posts’);

    Ops, retire o que disse, rs.

    Isso faz com que o código que vc me ajudou, pare de funcionar.
    Realmente preciso de ajuda.

    Colocando isso antes do loop funciona, mas entramos na questão do desempenho como citado anteriormente:

    global $query_string;
    query_posts(“{$query_string}&posts_per_page=9”);

    • Esta resposta foi modificada 2 months, 3 weeks atrás por  sdcom.
    Moderador Felipe Elia

    (@felipeelia)

    Opa, desculpa a demora (semana intensa por aqui, quase sem tempo livre pro fórum).

    Então, a questão toda é alterar aquele if para só pegar a página que você quer alterar. Qual é a diferença entre uma e outra que você poderia usar para montar o if?

    Como já se passaram alguns dias, imagino que a solução foi seguir com o código que estava funcionando (quem nunca né), mas se quiser descobrir como alterar é só deixar aqui.

    Olá Felipe,

    Desculpa a demora em responder.
    Sim, eu estou utilizando o código que postei anteriormente.
    Em relação a diferença entre ambas, é que em um IF (que não precisa de paginação) ele mostra a lista de todas as custom taxonomia e o outro IF (que preciso da paginação) mostra a lista de produtos da custom taxonomia.

Visualizando 10 respostas - 16 até 25 (de um total de 25)
  • Você deve estar conectado para responder a este tópico.