カスタム投稿タイプの 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 のカスタム投稿タイプ及びカスタムタクソノミーはとても便利ですね。
皆さんのご参考になれば幸いです。
コメント