Display category posts grouped by taxonomy

I’m working on a project where I use the default posts as “Products”, default category as “Application” and a custom taxonomy called “Groups”.

I want to list “Products” by “Application” (category.php) but group them together into their respective “Groups”:

Read More
  • Automotive (Application)
    • Silver (Group)
      • Product 01
      • Product 04
      • Product 05
    • Flake (Group)
      • Product 02
      • Product 03
      • Product 06

I’ve tried different attempts but with no successful result.

Is there an easy way to go about this? Thanks!

Related posts

Leave a Reply

1 comment

  1. I’ve found a solution!

    <?php
        // Get current Category
        $get_current_cat = get_term_by('name', single_cat_title('',false), 'category');
        $current_cat = $get_current_cat->term_id;
    
    
        // List posts by the terms for a custom taxonomy of any post type
        $post_type = 'myposttype';
        $tax = 'mytaxonomy';
        $tax_terms = get_terms( $tax, 'orderby=name&order=ASC');
        if ($tax_terms) {
            foreach ($tax_terms  as $tax_term) {
                $args = array(
                    'post_type'         => $post_type,
                    "$tax"              => $tax_term->slug,
                    'post_status'       => 'publish',
                    'posts_per_page'    => -1,
                    'category__in'      => $current_cat // Only posts in current category (category.php)
                );
    
                $my_query = null;
                $my_query = new WP_Query($args);
    
                if( $my_query->have_posts() ) : ?>
    
                    <h2><?php echo $tax_term->name; // Group name (taxonomy) ?></h2>
    
                    <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
                        <?php $term_list = wp_get_post_terms($post->ID, 'category', array("fields" => "ids")); // Get post categories IDs?>
    
                        <?php if (in_array($current_cat, $term_list) ): // Display only posts that have current category ID ?>
                            <h3><?php the_title(); ?></h3>
                        <?php endif; // if in_array ?>
    
                    <?php endwhile; // end of loop ?>
    
                <?php endif; // if have_posts()
                wp_reset_query();
    
            } // end foreach #tax_terms
        } // end if tax_terms
    ?>