web-dev-qa-db-fra.com

Afficher tous les articles de type publication personnalisée triés par taxonomie personnalisée, puis par une autre taxonomie personnalisée

Désolé pour le titre déroutant. Je ne sais pas comment mieux le décrire. J'aimerais afficher tous les magasins d'abord triés par leurs catégories, puis, à l'intérieur, triés par leur emplacement.

J'ai un type de message personnalisé "Boutique", deux taxonomies personnalisées "Catégorie de magasin", "Emplacement du magasin".

Exemple d'affichage souhaité:

Des chaussures

Londres

  • Boutique 01
  • Boutique 02

Tokyo

  • Boutique 05
  • Boutique 06

Électronique

Londres

  • Boutique 11
  • Boutique 12

Tokyo

  • Boutique 15
  • Boutique 16

Chaussures, électronique, (...) - Taxonomie n ° 1

Londres, Tokyo, (...) - Taxonomie n ° 2

Shop 01, (...) - Type de message personnalisé

Vous avez réussi à montrer triés par une taxonomie jusqu'à présent. Cela fonctionne bien mais il me faut un niveau supplémentaire.

<?php
$custom_terms = get_terms('shop_category');
foreach ($custom_terms as $custom_term) {

wp_reset_query();
$args = array(
    'post_type' => 'shop',
    'tax_query' => array(
        array(
            'taxonomy' => 'shop_category',
            'field' => 'slug',
            'terms' => $custom_term->slug,
        ),
    ),
);

$loop = new WP_Query($args);
if($loop->have_posts()) {
    echo '<div class="box-category">'.$custom_term->name.'</div>';

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

}
?>

Merci d'avance pour les directions.

1
HazeHybrid

Commencez par obtenir une liste de catégories et une liste de lieux. Parcourez ensuite chaque catégorie. Dans chaque catégorie, parcourez la liste des emplacements et des publications de requête contenant la catégorie et l'emplacement actuels, puis générez la liste:

$categories = get_terms( array(
    'taxonomy' => 'shop_category',
) );

$locations = get_terms( array(
    'taxonomy' => 'shop_location',
) );

foreach ( $categories as $category ) {
    echo '<div class="box-category">' . $category->name . '</div>';

    foreach ( $locations as $location ) {
        $shops = new WP_Query( array(
            'post_type' => 'shop',
            'tax_query' => array(
                array(
                    'terms'    => $category->term_id,
                    'taxonomy' => 'shop_category',
                ),
                array(
                    'terms'    => $location->term_id,
                    'taxonomy' => 'shop_location',
                ),
            ),
        ) );

        if( $shops->have_posts() ) {
            echo '<div class="box-location">' . $location->name . '</div>';

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

        wp_reset_postdata();
    }
}
0
Jacob Peattie