カスタム投稿タイプとタクソノミー(taxonomy)について

この記事は5年前に書かれました。不適当な記述を含む場合がありますので、参考程度に留めてください。

WordPressの機能、カスタム投稿タイプ関連についてまとめておきます。
※PHPに関する知識が十分でないため、いろいろなサイト様で勉強しながら自分なりに理解した内容です。
間違いがあればお知らせ下さい。

カスタム投稿タイプとは

1つのWordpress内に複数のブログを作る機能がカスタム投稿タイプです。
必要になることが結構多いこの機能。
設定の仕方から応用までずらっとメモしていきましょう。
 
もくじ

・カスタム投稿タイプを設定する
・カスタム投稿タイプに投稿した記事を表示する
・タクソノミーとは
・タクソノミーを使う

カスタム投稿タイプを設定する

function.phpに書き込みます。
ここでは、通常のブログ投稿(post)の他に、本を紹介するbookという投稿タイプを作成することにします。


add_action(‘init’, ‘add_type_book’);
function add_type_book()
{
$labels = array(
‘name’ => _x(‘BOOK ‘, ‘post type general name’),
‘singular_name’ => _x(‘BOOK ‘, ‘post type singular name’),
‘add_new’ => _x(‘新しくBOOK記事を書く’, ‘book’),
‘add_new_item’ => __(‘BOOK記事を書く’),
‘edit_item’ => __(‘BOOKを編集’),
‘new_item’ => __(‘BOOK 記事’),
‘view_item’ => __(‘BOOK 記事を見る’),
‘search_items’ => __(‘BOOK 記事を探す’),
‘not_found’ => __(‘BOOK 記事はありません’),
‘not_found_in_trash’ => __(‘ゴミ箱にBOOK 記事はありません’),
‘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’,’thumbnail’,’custom-fields’,’excerpt’,’author’,’trackbacks’,’comments’,’revisions’,’page-attributes’),
‘has_archive’ => true
);
register_post_type(‘book’,$args); //投稿タイプ"book"を登録
}

これで管理画面に「BOOK」という投稿メニューが出てくる筈です。

カスタム投稿タイプに投稿した記事を表示する

カスタム投稿の一覧を表示するには、


<?php if ( have_posts() ) : query_posts(‘post_type=book&posts_per_page=30&paged=’.$paged); ?>
<?php while ( have_posts() ) : the_post(); ?>
//ループ内容
<?php endwhile; endif; ?>

そのカスタム投稿タイプ専用のシングルページを作成する場合は、

single-<投稿タイプ名>.php

を作成して通常通りにループを作ればOKです。今回の場合だとsingle-book.phpになります。
専用のシングルページが無い場合はsingle.phpに表示されます。
 
 
ただ、記事が投稿できてもカテゴリーやタグ機能がないと使いにくいですよね。
そこでタクソノミーの出番です。

タクソノミーとは

タクソノミー(=カスタム分類)とは、カスタム投稿タイプにとってのカテゴリーやタグにあたります。
カテゴリーやタグとほぼ同じように扱えます。

カスタム投稿タイプを作成した先ほどのコードのregister_post_type(‘book’,$args);に続けて記述して下さい。


$cat = array(
‘label’ => ‘BOOKのカテゴリ’,
‘labels’ => array(
‘name’ => ‘BOOKカテゴリ’,
‘singular_name’ => ‘BOOKカテゴリ’,
‘search_items’ => ‘BOOKカテゴリを検索’,
‘popular_items’ => ‘よく使われているBOOKカテゴリ’,
‘all_items’ => ‘すべてのBOOKカテゴリ’,
‘parent_item’ => ‘親BOOKカテゴリ’,
‘edit_item’ => ‘BOOKカテゴリの編集’,
‘update_item’ => ‘更新’,
‘add_new_item’ => ‘新規BOOKカテゴリを追加’,
‘new_item_name’ => ‘新しいBOOKカテゴリ’,
),
‘public’ => true,
‘show_ui’ => true,
‘hierarchical’ => true,//fales→通常投稿のタグのような扱いになります。
‘show_tagcloud’ => true
);
register_taxonomy(‘book_category’, ‘book’, $cat);//(‘タクソノミー名’, ‘所属する投稿タイプ’, $cat);

タクソノミーを使う

●タクソノミーページを作る

taxonomy-<タクソノミー名>–<ターム名>.php
taxonomy-<タクソノミー名>.php
taxonomy.php

の順で適用されます。

ターム(term)というのは、タクソノミー内の項目のことなので、
book_categoryにnovelというタームを作成した場合、novelの記事一覧にはtaxonomy-book_category-novel.phpに記述された内容が表示されるということです。
 

●記事が所属するターム一覧をを表示する

get_the_term_listを使います。


<?php $term_list = get_the_term_list( $post->ID, ‘book_category’, ‘<ul><li>’,'</li><li>’,'</li></ul>’); ?>
//( $post->ID, ‘タクソノミー名’, ‘ターム一覧の最初に表示するタグ’,’タームの間に表示するタグ’,’ターム一覧の最後に表示するタグ’);
<?php if ( $term_list ): ?>
<?php echo $term_list; ?>
<?php endif; ?>

標準のカテゴリーに比べると少々ややこしいですね。

とりあえず今回はここまで。