Listar todas as postagens do tipo de postagem personalizada por taxonomia

18

Existe uma maneira de listar todas as postagens em um tipo de postagem personalizado específico e organizá-las pelo termo de taxonomia personalizada anexado a elas?

Por exemplo:

Termo de Taxonomia # 1
Tipo de Post
Tipo de Post
Tipo de postagem -

Termo de taxonomia nº 2
Tipo de Post
Tipo de postagem -

Qualquer ajuda seria muito apreciada.

Obrigado.

    
por Dean Elliott 25.09.2012 / 16:24

4 respostas

42

Tente isso

$custom_terms = get_terms('custom_taxonomy');

foreach($custom_terms as $custom_term) {
    wp_reset_query();
    $args = array('post_type' => 'custom_post_type',
        'tax_query' => array(
            array(
                'taxonomy' => 'custom_taxonomy',
                'field' => 'slug',
                'terms' => $custom_term->slug,
            ),
        ),
     );

     $loop = new WP_Query($args);
     if($loop->have_posts()) {
        echo '<h2>'.$custom_term->name.'</h2>';

        while($loop->have_posts()) : $loop->the_post();
            echo '<a href="'.get_permalink().'">'.get_the_title().'</a><br>';
        endwhile;
     }
}

Recebemos todos os termos de uma taxonomia, passamos por eles e enviamos um link de título para cada postagem que pertence a esse termo. Se você precisar reordenar os termos de taxonomia, poderá fazê-lo facilmente com um plug-in. Reordenar a taxonomia , eu acredito. Mas tenha em atenção que este plug-in adiciona (!) outra coluna à sua tabela em ativação e não a remove após a desativação !

    
por GhostToast 25.09.2012 / 18:10
1

Não é uma solução particularmente elegante, mas você pode criar várias consultas para cada um dos termos específicos e, em seguida, gerá-los. Espero que alguém possa criar uma maneira mais agradável de extrair automaticamente os termos para modificar a saída / classificação. Mas isso te ajudaria.

<?php

//First Query for Posts matching term1
$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'taxonomy_1',
            'field' => 'slug',
            'terms' => array( 'term1' )
        ),
    ),
    'post_type' => 'my-post-type'
);
$query = new WP_Query( $args );

if ( have_posts() ) {

    $term = $query->queried_object;

    echo 'All posts found in ' . $term->name;

    while ( have_posts() ) : the_post();
        //Output what you want
        the_title();
        the_content();
    endwhile;
}

//RESET YOUR QUERY VARS
wp_reset_query();

//Second Query for term2
$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'taxonomy_1',
            'field' => 'slug',
            'terms' => array( 'term2' )
        ),
    ),
    'post_type' => 'my-post-type'
);
$query = new WP_Query( $args );

if ( have_posts() ) {

    $term = $query->queried_object;

    echo 'All posts found in ' . $term->name;

    while ( have_posts() ) : the_post();
        //Output what you want
        the_title();
        the_content();
    endwhile;
}
    
por theMojoWill 25.09.2012 / 17:55
0

Nice um! A solução do GhostOne era o que eu procurava. Na minha situação, o tipo de postagem personalizada era 'minining_accidents' e as taxonomias personalizadas associadas a isso eram 'tipos de acidentes', que tinham vários termos sob ela. Minha ideia era criar um widget personalizado para mostrar a lista de postagens nos termos dessas taxonomias personalizadas. No meu teste, ele conseguiu o que eu queria. Descanso foi enfeitar. Aqui está o meu código:

function fn_get_list_of_mining_accident_types()
{
    $custom_taxonomy='accident-types';  
    $custom_terms = get_terms($custom_taxonomy);    
    $str_return='<ul>';
    foreach($custom_terms as $custom_term) 
    {
        wp_reset_query();
        $args = array(
            'post_type' => 'minining_accidents',
            'tax_query' => array(               
                array(
                    'taxonomy' => $custom_taxonomy,
                    'field' => 'slug',
                    'terms' => $custom_term->slug,
                ),
            ),
        );  

        $loop = new WP_Query($args);

        $term_name=$custom_term->name;
        $term_slug=$custom_term->slug;
        $term_link=get_term_link($term_slug, $custom_taxonomy);

        $str_return.='<li><a href="'.$term_link.'">'.$term_name.'</a>';

        if($loop->have_posts()) 
        {
            $str_return.='<ol>';

            while($loop->have_posts()) : $loop->the_post();
                $str_return.='<li><a href="'.get_permalink().'">'.get_the_title().'</a></li> ';
            endwhile;

            $str_return.='</ol>';           
         }
         $str_return.='</li>';
    }
    $str_return.='</ul>';
    return $str_return;
}

Sim! Há sempre uma opção para melhorar ainda mais o código.

    
por Niraj Kumar 10.07.2014 / 14:16
-1

Para mostrar uma lista de postagens personalizadas de uma taxonomia personalizada

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'your-custom-taxonomy',
            'field' => 'slug',
            'terms' => array( 'your-term' )
        ),
    ),
    'post_type' => 'your-post-type'
);
$loop = new WP_Query($args);
     if($loop->have_posts()) {
    $term = $wp_query->queried_object;
     while($loop->have_posts()) : $loop->the_post();
        //Output what you want      
   echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
      endwhile;
}

Título

  • Item da lista
  • Item da lista
  • Item da lista
por wpdevramki 29.07.2014 / 07:58