サポート » 使い方全般 » カスタム投稿タイプとカスタム分類で 投稿の一覧をページに表示

  • 解決済 sanjo_k

    (@sanjo_k)


    以下のサイトを参考にさせて頂き、カスタム投稿タイプとカスタム分類を作りました。

    http://www.h-fj.com/blog/archives/2010/07/02-105158.php

    add_action('init', 'hoge_custom_post_type');
    function hoge_custom_post_type(){
      $labels = array(
        'name' => _x('hoge', 'post type general name'),
        'singular_name' => _x('hoge', 'post type singular name'),
        'add_new' => _x('hogeを追加', 'book'),
        'add_new_item' => __('新しいhogeを追加'),
        'edit_item' => __('hogeを編集'),
        'new_item' => __('新しいhoge'),
        'view_item' => __('プレビュー'),
        'search_items' => __('hoge内で探す'),
        'not_found' =>  __('hogeはありません'),
        'not_found_in_trash' => __('ゴミ箱にhogeはありません'),
        'parent_item_colon' => ''  );  $args = array(    'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => 5,
        'supports' => array('title','editor','author','custom-fields','revisions'),
        'show_in_nav_menus' => true
      );
      register_post_type('hoge',$args);
    
     $args = array(
        'label' => 'hogehogeカテゴリ',
        'labels' => array(
          'name' => 'hogehogeカテゴリ',
          'singular_name' => 'hogehogeカテゴリ',
          'search_items' => 'hogehogeカテゴリを検索',
          'popular_items' => 'よく使われているhogehogeカテゴリ',
          'all_items' => 'すべてのhogehogeカテゴリ',
          'parent_item' => 'hogehogeカテゴリ',
          'edit_item' => 'hogehogeカテゴリの編集',
          'update_item' => '更新',
          'add_new_item' => 'hogehogeカテゴリを追加',
          'new_item_name' => 'hogehogeカテゴリ',
        ),
        'public' => true,
        'show_ui' => true,
        'hierarchical' => true,
        'show_tagcloud' => true
      );
      register_taxonomy('hogehoge', 'hoge', $args);
    }

    hogehogeに作成したカテゴリ A、B

    やりたい事は、
    同一ページ内にAの記事タイトル一覧とBの記事タイトル一覧をそれぞれ載せたいのです。

    page-hoge.phpを作成して、色々試行錯誤して
    hogeの記事タイトル一覧は作成できたのですが、カテゴリ毎がうまくできません。
    アーカイブでは表示されます。

    ページに表示させるにはどうすればいいのか
    教えていただけないでしょうか。よろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    sanjo_kさん、ようこそ。

    hogeの記事タイトル一覧はできているとのことなので、あとは、hogehogeカテゴリのリストを取得して、それをループして、カテゴリ毎に一覧を取得すれば良いことになります。

    hogehogeカテゴリですが、下記のコードでカテゴリのデータが取得できます。

    $taxonomy_name = 'hogehoge';
    $hogehoge_taxonomies = get_terms( $taxonomy_name );

    ここで取得できた$hogehoge_taxonomiesをforeachでループさせて、記事を取得し、リスト表示を行います。

    <?php
    $taxonomy_name = 'hogehoge';
    $hogehoge_taxonomies = get_terms( $taxonomy_name );
    
    // hogehoge タクソノミーが登録されていなければループしない。
    if ( ! is_wp_error( $hogehoge_taxonomies ) && count( $hogehoge_taxonomies ) ) {
    ?>
    <ul class="hoge_tax_list">
    <?php
    	foreach ( $hogehoge_taxonomies as $hogehoge_taxonomy ) {
    		// 投稿タイプがhoge で $taxonomy_name タクソノミーかつ、 カテゴリーが$hogehoge_taxonomy->slugの記事を取得
    		$tax_posts = get_posts( array( 'post_type' => 'hoge', 'taxonomy' => $taxonomy_name, 'term' => $hogehoge_taxonomy->slug ) );
    		// 記事があれば、カテゴリーと記事のリストを表示
    		if ( $tax_posts ) {
    ?>
    	<li class="hoge_tax"><?php echo $hogehoge_taxonomy->name; ?>
    		<ul class="hoge_tax_<?php echo esc_attr( $hogehoge_taxonomy->slug ); ?>">
    <?php
    			foreach ( $tax_posts as $tax_post ) {
    				$link = get_permalink( $tax_post->ID );
    ?>
    			<li class="hoge_tax_post"><a href="<?php echo esc_url( $link ); ?>"><?php echo esc_html( apply_filters( 'the_title', $tax_post->post_title ) ); ?></a></li>
    <?php
    			}
    ?>
    		</ul>
    	</li>
    <?php
    		}
    	}
    ?>
    </ul>
    <?php
    }
    ?>
    トピック投稿者 sanjo_k

    (@sanjo_k)

    jim912さん ありがとうございます!
    教えていただいたのでうまく表示されました。

    ただ表示させたい形が

    みだし A

    Aについて文章

    Aの記事のタイトルリスト

    みだし B

    Bについて文章

    Bの記事のタイトルリスト

    の形で表示させたいのです。
    なので、Aの一覧だけ、Bの一覧だけ と分けるにはどうしたらよいでしょうか?
    よろしくお願いします。

    モデレーター jim912

    (@jim912)

    sanjo_kさん

    ○についての文章ですが、カテゴリーに関する情報であることから、カテゴリーの説明を使うのが最適かと思いますが、その他にもページのカスタムフィールドを利用する方法、投稿欄内にタイトルリストを出力するショートコードを記述する方法が考えられます。

    このうち、カテゴリーの説明を利用する方法と、ページのカスタムフィールドを利用する方法のサンプルを紹介します。

    カテゴリーの説明を利用する方法

    <?php
    $taxonomy_name = 'hogehoge';
    $hogehoge_taxonomies = get_terms( $taxonomy_name );
    
    // hogehoge タクソノミーが登録されていなければループしない。
    if ( ! is_wp_error( $hogehoge_taxonomies ) && count( $hogehoge_taxonomies ) ) {
    	foreach ( $hogehoge_taxonomies as $hogehoge_taxonomy ) {
    		// 投稿タイプがhoge で $taxonomy_name タクソノミーかつ、 カテゴリーが$hogehoge_taxonomy->slugの記事を取得
    		$tax_posts = get_posts( array( 'post_type' => 'hoge', 'taxonomy' => $taxonomy_name, 'term' => $hogehoge_taxonomy->slug ) );
    		// 記事があれば、カテゴリーと記事のリストを表示
    		if ( $tax_posts ) {
    ?>
    <div class="hoge_tax">
    	<h3><?php echo $hogehoge_taxonomy->name; ?></h3>
    	<div class="taxonomy_description">
    		<?php echo $hogehoge_taxonomy->description; ?>
    	</div>
    	<ul class="hoge_tax_<?php echo esc_attr( $hogehoge_taxonomy->slug ); ?>">
    <?php
    			foreach ( $tax_posts as $tax_post ) {
    				$link = get_permalink( $tax_post->ID );
    ?>
    		<li class="hoge_tax_post"><a href="<?php echo esc_url( $link ); ?>"><?php echo esc_html( apply_filters( 'the_title', $tax_post->post_title ) ); ?></a></li>
    <?php
    			}
    ?>
    	</ul>
    </div>
    <?php
    		}
    	}
    }
    ?>

    ページのカスタムフィールドを利用する方法

    <?php
    $taxonomy_name = 'hogehoge';
    $hogehoge_taxonomies = get_terms( $taxonomy_name );
    
    // hogehoge タクソノミーが登録されていなければループしない。
    if ( ! is_wp_error( $hogehoge_taxonomies ) && count( $hogehoge_taxonomies ) ) {
    	foreach ( $hogehoge_taxonomies as $hogehoge_taxonomy ) {
    		// 投稿タイプがhoge で $taxonomy_name タクソノミーかつ、 カテゴリーが$hogehoge_taxonomy->slugの記事を取得
    		$tax_posts = get_posts( array( 'post_type' => 'hoge', 'taxonomy' => $taxonomy_name, 'term' => $hogehoge_taxonomy->slug ) );
    		// 記事があれば、カテゴリーと記事のリストを表示
    		if ( $tax_posts ) {
    			$tax_description = get_post_meta( $post->ID, 'tax_description_' . $hogehoge_taxonomy->slug, true );
    ?>
    <div class="hoge_tax">
    	<h3><?php echo $hogehoge_taxonomy->name; ?></h3>
    	<div class="taxonomy_description">
    		<?php echo $tax_description; ?>
    	</div>
    	<ul class="hoge_tax_<?php echo esc_attr( $hogehoge_taxonomy->slug ); ?>">
    <?php
    			foreach ( $tax_posts as $tax_post ) {
    				$link = get_permalink( $tax_post->ID );
    ?>
    		<li class="hoge_tax_post"><a href="<?php echo esc_url( $link ); ?>"><?php echo esc_html( apply_filters( 'the_title', $tax_post->post_title ) ); ?></a></li>
    <?php
    			}
    ?>
    	</ul>
    </div>
    <?php
    		}
    	}
    }
    ?>

    トピック投稿者 sanjo_k

    (@sanjo_k)

    jim912さん 二パターンも教えて頂きありがとございます!

    両方とも試してみて、どちらも思い通りの表示をさせる事ができました。
    今回は見出しに入るカテゴリーをメニューにも使用している為
    カテゴリの修正や追加が入った時に
    1箇所で済む「ページのカスタムフィールドを利用する方法」を
    使いたいと思います。

    とても助かりました。ありがとうございました。

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