WP:カスタムタクソノミーごとの投稿とタームの一覧表示

home.phpなどの投稿ページに、タクソノミーのターム(カテゴリー)ごとに投稿の一覧または子カテゴリーを表示するソースです。

<div class="box">

      <?php
      $args = array(
        'parent' => 0,
        'hierarchical' => 0,
        'order' => 'ASC'
      );
      $taxonomy_name = 'タクソノミー名';
      $taxonomys = get_terms( $taxonomy_name, $args );
      if ( !is_wp_error( $taxonomys ) && count( $taxonomys ) ):
        foreach ( $taxonomys as $taxonomy ):
          $url = get_term_link( $taxonomy->slug, $taxonomy_name );

      ?>



      <div class="contentbox01">

        <h2 id="<?php echo esc_html($taxonomy->slug); ?>" class="h2_style01"><?php echo esc_html($taxonomy->name); //タームタイトル?></h2>

        <div class="contentbox01_in">



          <table class="table_style01">




            <?php
            /**
             * お知らせ等の一覧を取得
             *
             */
            $args = array(
              'post_type' => 'カスタム投稿名',
              'posts_per_page' => 10, //新着順に10件表示
              'orderby' => 'post_date',
              'order' => 'DESC',
              'post_status' => 'publish',
              'tax_query' => array(
                'relation' => 'AND',
                array(
                  'taxonomy' => 'タクソノミー名',
                  'field' => 'slug',
                  'terms' => $taxonomy->slug,
                  'include_children' => true,
                  'operator' => 'IN'
                ),
              )
            );

            $the_query = new WP_Query( $args );

            if ( $the_query->have_posts() ):
              ?>

            <?php
            $term_id = $taxonomy->term_id;
            $children = get_term_children( $term_id, $taxonomy_name );
            if ( $children ): //子タームを持つ場合にはタームの一覧を表示
              ?>

            <?php
            $term_id = $taxonomy->term_id;
            $taxonomy_name = 'タクソノミー名';
            $termchildren = get_term_children( $term_id, $taxonomy_name );


            foreach ( $termchildren as $child ) {
              $term = get_term_by( 'id', $child, $taxonomy_name );
              echo '<tr><td><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a><td></th>';
            }

            ?>



            <?php else: ?> //子タームを持たない場合には投稿の一覧を表示



            <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>



            <tr>
              <th>
                <?php the_time('Y.m.d'); ?>
              </th>
              <td>
                <?php
                $cf_important = get_field( 'important' ); //ACFで作成したチェックボックス
                if ( $cf_important == '表示する' ) {
                  echo '<span class="important01">重要</span>';
                } else {
                  echo ' ';
                }
                ?>
                <?php if(get_field('important')): ?>
                <span class="important01">重要</span>
                <?php endif ;?>
                <a href="<?php the_permalink(); ?>">
                  <?php the_title(); ?>
                </a>
              </td>
            </tr>

            <?php
            endwhile;
            ?>

            <?php endif; ?>

            <?php
            endif;
            wp_reset_postdata();
            ?>



          </table>




        </div>
        <div class="btnbox01">
          <a href="<?php echo esc_url( home_url( '/' ) ); ?><?php echo esc_html($taxonomy->slug); ?>/">一覧へ</a>
        </div>
      </div>

      <?php endforeach; endif; wp_reset_postdata(); ?>


    </div>
    <!-- box -->

admin

cl0606

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です