web-dev-qa-db-ja.com

すべてのカスタム投稿タイプの投稿をカスタム分類カテゴリにソートしてから別のカスタム分類に表示する

紛らわしいタイトルですみません。どのようにそれをよりよく説明するのかわからないすべての店舗をまず自分のカテゴリー別にソートして表示し、次にその中にその店舗別にソートして表示します。

カスタムの投稿タイプ "Shop"、2つのカスタム分類法 "Shop Category"、 "Shop Location"があります。

表示方法の例を示します。

ロンドン

  • ショップ01
  • ショップ02

東京

  • ショップ05
  • ショップ06

エレクトロニクス

ロンドン

  • ショップ11
  • ショップ12

東京

  • ショップ15
  • ショップ16

靴、電化製品、(...) - 分類法#1

ロンドン、東京、(...) - 分類法#2

ショップ01、(...) - カスタム投稿タイプ

これまで1つの分類法でソートされて表示されていました。それはうまくいきますが、もう1つレベルが必要です。

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

}
?>

事前に指示をありがとう。

1
HazeHybrid

まずカテゴリのリストと場所のリストを取得します。次に各カテゴリをループします。各カテゴリ内で、現在のカテゴリと現在の場所を持つ場所のリストとクエリ投稿をループ処理し、リストを出力します。

$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