Group Custom post type in a page by its taxomony tag

I hope i can write a clear question since i got confused trying to solve this…

I got a custom post type… that custom post type has taxomony (category like)
and i want to return a structure like this in a page that show all posts of
that post type..

——————————————— DESIRED STURCTURE

taxomony category name (Example: new york)
– post one (assosicated with new york category)
– post two (assosicated with new york category)
– post three (assosicated with new york category)

taxomony category name (Example: Washington DC)
– post one (assosicated with Washington DC category)
– post two (assosicated with Washington DC category)
– post three (assosicated with Washington DC category)
– post four (assosicated with Washington DC category)
– post Five (assosicated with Washington DC category)

taxomony category name (Example: SomeCity)
– post one (assosicated with SomeCity category)
– post two (assosicated with SomeCity category)

This is the code i have now:

        <div class="pageContent portfolioPage">

            <!--=STR== PAGE TITLE ===-->
            <?php if (have_posts()) : ?>
            <?php while (have_posts()) : the_post(); ?>   
                <h1 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h1>
                <?php the_content(); ?>
            <?php endwhile; endif; ?>
            <!--=END== PAGE TITLE ===-->

            <!--=STR== OUR CLIENTS ===-->                   
            <?php 
            /*
                query_posts(array( 
                    'post_type' => 'vacationrental',
                    'showposts' => 100
                ) );  
            */
            $loop = new WP_Query( array( 
            'post_type' => 'vacationrental',
            'post_per_page' => 100,
            'orderby' => 'date',
            'order' => 'ASC'
            ));             

            ?>


            <?php while ($loop->have_posts()) : $loop->the_post(); ?>
                <div class="vacationRentalBox">
                    <div class="vacationRentalBox-inner">

                        <?php
                        $image_id = get_post_thumbnail_id();  
                        $image_url = wp_get_attachment_image_src($image_id,'large');  
                        $image_url = $image_url[0];  
                        // $googleMapsUrl = get_post_meta( $post->ID, 'vacationrental_map', true ); // GOOGLE MAPS URL
                        ?>              

                        <div class="vacationRentalBar">
                            <div class="vacationRentalName"><a href="https://wordpress.stackexchange.com/questions/38075/<?php the_permalink(); ?>"><?php the_title(); ?></a></div> 

                            <div class="thumbsingle">
                            <a title="<?php the_title(); ?>" href="<?php echo $image_url; ?>" class="lightbox"><?php the_post_thumbnail('testimonialPage'); ?></a>
                            </div>      

                            <div class="vacationRentalDescription"><?php dynamic_excerpt(315); ?></div> 

                            <div class="vacationRentalExtraInfo">
                                <div class="vacationRentalReadMore"><a href="https://wordpress.stackexchange.com/questions/38075/<?php the_permalink(); ?>" rel="nofollow"><?php _e('Read More &rarr;' ,'sagive'); ?></a></div>                             
                            </div>
                            <br style="clear: both;" />
                        </div>

                    </div>
                </div>

            <?php endwhile;?>
            <!--=END== OUR CLIENTS ===-->                           

            <br style="clear: both;" />
        </div>

.
I managed to get the list of taxomonies categories using this:

$terms = get_terms("locations");
$count = count($terms);
if ( $count > 0 ){
    echo "<ul>";
    foreach ( $terms as $term ) {
    echo "<li>" . $term->name . "</li>";

    }
    echo "</ul>";
}

But i dont know how to integrate that into the loop / structure
Would really apreaciate your help since i am stuck…

2 Answers
2

If I follow your question correctly you could use a nested query loop, that is looping through your taxonomy terms and then doing a WP_Query loop for each one.

There is a more complicated approach using custom SQL and a filter but the following example is what I would go for:

$terms = get_terms("locations");
$count = count($terms);
if ( $count > 0 ){
    foreach ( $terms as $term ) {
        echo '<h2>' . $term->name . '</h2>';
        echo '<ul>';
        $loop = new WP_Query( array( 
            'post_type' => 'vacationrental',
            'post_per_page' => 100,
            'orderby' => 'date',
            'order' => 'ASC',
            'tax_query' => array(
                array(
                    'taxonomy' => 'locations',
                    'field' => 'id',
                    'terms' => $term->term_id
                )
            )
        ));
        // the loop
        while ($loop->have_posts()) : $loop->the_post();
            // do loop content
            echo '<li>' . get_the_title() . '</li>';
        endwhile;
        // reset $post so that the rest of the template is in the original context
        wp_reset_postdata();
        echo '</ul>';
    }
}

Leave a Comment