WordPress のカスタム投稿タイプでカスタムタクソノミーを具体的に使う

カスタム投稿タイプの supports に title とか editor とか入れて、それぞれを有効化しますが category とか tag とかの他に自由な名前を設定することができます。

カスタムタクソノミー(Custom Taxonomy)の導入と使い方 [WordPress 3.0] | Odysseygate.com

上記のページが詳しく解説されていますので、私の方からは最速で使う方法を紹介します。

今回やること

「お知らせの種類」という名前のタクソノミーを作成し、お知らせというカスタム投稿タイプで使えるようにします。その後、お知らせ一覧のコーナーで「お知らせの種類」の内容を出力させて頂きます。

カスタムタクソノミーを作成する

変更点は news とか news_type と書いてある部分と、お知らせの種類と書いてあるところです。
他の項目に関しては以下のページに詳しく書いてありますので参考にしましょう。
WordPressのカスタムタクソノミーを使えるようにするまでのメモ 1/2 – WEB備忘録 : VARL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function news_custom_taxonomies() {
	register_taxonomy(
		'news_type',
		'news',
		array(
			'hierarchical' => true,
			'label' => 'お知らせの種類',
			'singular_name' => 'お知らせの種類',
			'query_var' => true,
			'rewrite' => true
		)
	);
}
add_action('init', 'news_custom_taxonomies', 0);

register_taxonomy() 関数の第2引数にはカスタム投稿タイプの名前を書きましょう。今回はたまたま news でしたけど、違う場合もあるのではないでしょうか。この点については以下のページが参考になりました。

WordPressのカスタムタクソノミーを使えるようにするまでのメモ 1/2 – WEB備忘録 : VARL

カスタム投稿タイプで使えるようにする

作成したカスタムタクソノミーをお知らせというカスタム投稿タイプを作る過程で読み込みます。とても長いコードですが今回注目するのは taxonomies という部分だけです。先程作成したお知らせの種類を news_type という風に指定して使用するように設定しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function custom_post_type_news() {
	$labels = array(
		'name' => _x('お知らせ', 'post type general name'),
		'singular_name' => _x('お知らせ', 'post type singular name'),
		'add_new' => _x('お知らせを追加', 'book'),
		'add_new_item' => __('新しいお知らせを追加'),
		'edit_item' => __('お知らせを編集'),
		'new_item' => __('新しいお知らせ'),
		'view_item' => __('お知らせを編集'),
		'search_items' => __('お知らせを探す'),
		'not_found' =>  __('お知らせはありません'),
		'not_found_in_trash' => __('ゴミ箱にお知らせはありません'),
		'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' => 2,
		'supports' => array('title','editor'),
		'taxonomies' => array('news_type')
	);
	register_post_type('news',$args);
}
add_action('init', 'custom_post_type_news');

お知らせの種類が追加されたか確認する

確認したところ追加されているようです。

さて、追加していきましょう。

ざっと3つくらい追加しましたね。

お知らせとカスタムタクソノミーを出力してみましょう

以下のコードで読み込むことができます。
出力は重要な部分なので、今回注目するべき部分を解説します。

1
2
3
4
5
6
7
8
9
10
$news = new wp_query();
$news->query('post_type=news&orderby=date&order=DESC&showpost=4');
	while($news->have_posts()) {
	$news->the_post();
	$news_term = get_the_terms($post->ID, 'news_type');
	echo '<p>' . get_the_title() . 'のお知らせの種類 = ';
	foreach($news_term as $news_term_item) {
		echo '[' . $news_term_item->name . '] ';
	}
}

2行目: $news->query(‘post_type=news&orderby=date&order=DESC&showpost=4&posts_per_page=4′);

post_type=news っていうところは、news というカスタム投稿タイプの記事を読み込みますよーということです。

orderby=date&order=DESC の部分は、記事の投稿時間が新しいものほど上に来るようにしますーということです。

showpost=4&posts_per_page=4 のところは4件まで取得しますということです。

5行目: $news_term = get_the_terms($post->ID, ‘news_type’);

これで変数 $news_term にこの記事毎に設定されているカスタムタクソノミーが格納されます。
WP カスタムタクソノミーの表示方法や条件分岐などのメモ 2/2 – WEB備忘録 : VARL

カスタムタクソノミーは複数設定することができますので、値は複数入ってくることもあります。

カスタムタクソノミーを一件設定している場合の $news_term の中身を紹介しておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(
    [4] => stdClass Object
        (
            [term_id] => 4
            [name] => ほげ
            [slug] => hoge
            [term_group] => 0
            [term_taxonomy_id] => 4
            [taxonomy] => news_type
            [description] => 
            [parent] => 0
            [count] => 1
            [object_id] => 2092
        )
 
)

7行目〜9行目: foreach($news_term…

foreach で複数の値を取り出して全て出力します。
カスタムタクソノミーは複数設定することができますので、値は複数入っている可能性がありますので、foreach で回して全て出力するようにします。

出力結果

以上を踏まえた上でコードを実行すると以下のようになるはずです。

テスト投稿のお知らせの種類 = [さーにゃ]
テスト投稿のお知らせの種類 = [えいら]
テスト投稿のお知らせの種類 = [さーにゃ] [えいら]

WordPress のカスタム投稿タイプ及びカスタムタクソノミーはとても便利ですね。
皆さんのご参考になれば幸いです。

コメント

コメントは受け付けていません。