サポート » 使い方全般 » カスタム投稿タイプのタームとタームごとの投稿名の一覧

  • 解決済 howan

    (@howan)


    カスタム投稿タイプに設定しているタームとそのタームに属している投稿名を一覧表示したいと考えています。

    [解決済み] カスタム投稿タイプのターム名取得について
    http://ja.forums.wordpress.org/topic/9252
    上記記事での内容とほぼ同じで、解決時に参照されているブログを元にやってみました。

    <?php
    $posttype_name = 'posttype001';
    $taxonomy_name = 'category001';
    $taxonomys = get_terms($taxonomy_name);
    if(!is_wp_error($taxonomys) && count($taxonomys)):
    	foreach($taxonomys as $taxonomy):
    		$tax_posts = get_posts(array('post_type' => $posttype_name, 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
    		if($tax_posts):
    ?>
    		<div class="category">
    			<h2><span><?php echo esc_html($taxonomy->name); ?></span></h2>
    			<ul>
    				<?php foreach($tax_posts as $tax_post): ?>
    				<li><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo esc_html($tax_post->post_title); ?></a></li>
    				<?php endforeach; ?>
    			</ul>
    		</div>
    <?php
    		endif;
    	endforeach;
    endif;
    ?>

    しかし、今回タームを階層構造にしているため、親タームの下にも投稿名が表示されてしまいます。

    下の”表示内容”に記載した理想の表示にするにはどうしたら良いかご教示いただけないでしょうか。

    ■カスタム投稿設定内容
    (Custom Post Type UI プラグインを使用しています。)

    投稿タイプ: posttype001

    タクソノミー: category001

    ターム:
    term001 (ターム001)
     term001_1 (ターム001_1)
    term002 (ターム002)
     term002_1 (ターム002_1)

    ■表示内容

    理想:
    ターム001
     ターム001_1
      Post001_1 (投稿のタイトル)
      Post001_2
    ターム002
     ターム002_1
      Post002_1

    現状:
    ターム001
      Post001_1
      Post001_2
     ターム001_1
      Post001_1
      Post001_2
    ターム002
      Post002_1
     ターム002_1
      Post002_1

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • #未検証

    <?php
    $post_type = 'posttype001';
    $taxonomy  = 'category001';
    $terms     = get_terms( $taxonomy );
    $parent    = null;
    if ( ! is_wp_error( $terms ) ) :
      foreach ( $terms as $term ) :
        if ( $term->parent ) :
          $posts = get_posts( array(
            'post_type' => $post_type,
            'taxonomy'  => $taxonomy,
            'term'      => $term->slug
          ) );
    
          if( $posts ) :
    ?>
    <div class="category">
    <?php
            if ( $parent ) {
              printf(
                '<h2><span>%s</span></h2>',
                esc_html( $parent->name )
              );
    
              $parent = null;
            }
    ?>
    <h2><span><?php echo esc_html( $term->name); ?></span></h2>
    <ul>
    <?php
            foreach ( $posts as $post ) {
              setup_postdata( $post );
    
              printf(
                '<li><a href="%1$s">%2$s</a></li>',
                get_permalink(),
                get_the_title()
              );
            }
            wp_reset_postdata();
    ?>
    </ul>
    </div>
    <?php
          endif;
        else :
          $parent = $term;
        endif;
      endforeach;
    endif;
    ?>

    親タームのマークアップはお好みで◎

    トピック投稿者 howan

    (@howan)

    kz 様
    ご回答いただいた内容で希望通りの表示となりました。
    どうもありがとうございました。

    初めてテンプレートを作成していて、ここだけどうしてもわからず大変困っておりました。
    これで完成に近づくことができます。
    コードの中身も調べて理解に努めたいと思います。
    重ね重ねありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタム投稿タイプのタームとタームごとの投稿名の一覧」には新たに返信することはできません。