web-dev-qa-db-fra.com

Afficher les articles de la catégorie regroupés par taxonomie

Je travaille sur un projet dans lequel j'utilise les publications par défaut comme "Produits", la catégorie par défaut comme "Application" et une taxonomie personnalisée appelée "Groupes".

Je veux lister "Produits" par "Application" (category.php) mais les regrouper dans leurs "Groupes" respectifs:

  • Automobile (Application)
    • Silver (Groupe)
      • Produit 01
      • Produit 04
      • Produit 05
    • Flocons (Groupe)
      • Produit 02
      • Produit 03
      • Produit 06

J'ai essayé différentes tentatives mais sans résultat.

Y a-t-il un moyen facile de s'y prendre? Merci!

6
rafawhs

J'ai trouvé une 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
?>
7
rafawhs