7

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":

  • 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!

1 Answer 1

8

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
?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.