Kotoriはマルファン症候群という難病を患っています! 今後は、マルファン症候群に関するトピックも扱っていきます!

パンD KOTORI Blogの公式キャラクター「パンD」です。
コーディングWordPressカスタム投稿タイプとカスタムタクソノミーまとめ

カスタム投稿タイプとカスタムタクソノミーまとめ

2014年01月12日WordPress カスタム投稿/カスタム分類 まとめ 
カスタム投稿タイプとカスタムタクソノミーまとめ記事のアイキャッチ画像

カスタム投稿タイプとカスタムタクソノミーについてまとめました。結構詳しくまとめた(つもりな)のでこの記事を参考にすればカスタム投稿タイプを使用して基本的なことは出来るようになると思います。

まえがき

カスタム投稿タイプとカスタムタクソノミーについてまとめました。
カスタム投稿タイプを使ってWordPress標準の「投稿」とは別の独立したブログコンテンツを作成する時に必要になりそうな項目をピックアップして解説します。

カスタム投稿タイプとカスタムタクソノミーを覚えるとできることの幅が格段に広がりますので抑えておいて損は無いと思います。

目次

  1. カスタム投稿タイプとカスタムタクソノミーの概要
  2. カスタム投稿タイプ&カスタムタクソノミーの作成
  3. カスタム投稿タイプのパーマリンク設定
  4. カスタム投稿タイプのテンプレートやタグ
  5. カスタムタクソノミーのテンプレートやタグ

カスタム投稿タイプとカスタムタクソノミーの概要

カスタム投稿タイプとは

標準で用意されている「投稿」「固定ページ」とは別に、ユーザーが独自で投稿タイプを追加することができます。
ユーザーが追加した投稿タイプを「カスタム投稿タイプ」と呼びます。

例えば「KoToRiの日記」という名前のカスタム投稿タイプを追加すると管理画面はこのようになります。

カスタム投稿タイプ参考

投稿タイプを分けることで、カテゴリやタグとは違った記事管理ができるしクライアントにより分かりやすい管理画面を提供することができます。

カスタムタクソノミーとは

標準で用意されているタクソノミー(分類)「カテゴリー」「タグ」とは別に、ユーザーが独自でタクソノミーを追加することが出来ます。
ユーザーが追加したタクソノミーを「カスタムタクソノミー」と呼びます。

タクソノミーという言葉が聞きなれない人もいるかと思いますが、要するに「カテゴリ」や「タグ」と同じようなものを自分で追加することができるという事です。

カスタムタクソノミーは「カスタム分類」と呼ばれることもあります。

タームとは

言葉で説明するとタクソノミーに属するものですかね。

例えばWordPressで「カテゴリ」に「日常」を追加したとします。
この場合は
「カテゴリ」がタクソノミー
「日常」がターム
という感じになります。

例えば「ごみの分別」というカスタムタクソノミーを作ったとします。
「ごみの分別」に「燃えるゴミ」と「燃えないゴミ」を追加しました。
この場合は
「ごみの分別」がタクソノミー
「燃えるゴミ」と「燃えないゴミ」がターム
という感じになります。

カスタム投稿タイプ&カスタムタクソノミーの作成

カスタム投稿タイプまたはカスタムタクソノミーを作成する場合、プラグイン使用します。
プラグインじゃなくてfunctions.phpにコードを書き足すことでも作成できるのですがプラグインを使用したほうが間違いがないかなと思います。簡単だし。

使用するプラグインは「Custom Post Type UI」です。

「Custom Post Type UI」を使ったカスタム投稿タイプとカスタムタクソノミーの追加方法はこの記事をご覧ください。

Custom Post Type UIの使い方[WordPress]

2015年3月18日 追記
もしカスタム投稿タイプのアーカイブページのURLに階層構造を持たせたい場合はこの記事を参考にしてください。

カスタム投稿タイプのURLに階層構造を持たせる[WordPress]

カスタム投稿タイプのパーマリンク設定

カスタム投稿タイプを追加できたらカスタム投稿タイプのパーマリンクを個別に設定するために「Custom Post Type Permalinks」というプラグインをインストールしましょう。

また、このプラグインをインストールすればカスタムタクソノミーのアーカイブページのURLを

http://hogehoge.com/投稿タイプ名/タクソノミー名/ターム名

という感じで「投稿タイプ名」が入る形に直してくれる他、カスタム投稿タイプの日付アーカイブリストを「wp_get_archives()」で出力できるようになります。

「Custom Post Type Permalinks」の導入方法や使い方はこちらの記事を参考にしてください。

カスタム投稿タイプのパーマリンクを変更する『Custom Post Type Permalinks』

カスタム投稿タイプのテンプレートやタグ

カスタム投稿タイプのアーカイブページ

例えばカスタム投稿名が「kotoridiary」の投稿タイプを追加したとします。
投稿タイプ「kotoridiary」のアーカイブページの適用テンプレートの優先順位はこのようになります。

  1. archive-kotoridiary.php
  2. archive.php
  3. index.php

「archive-kotoridiary.php」を作れば、投稿タイプ「kotoridiary」専用のアーカイブページを作成できます。
デザインを通常のアーカイブページと分けたい時に使いましょう。

一応ループのタグも載せておきます。といっても普通にループするだけなのですが。

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<div class="entry"><?php the_content(); ?></div>
<div class="data"><?php the_time('Y/m/d'); ?></div>
<?php endwhile; endif; ?>

カスタム投稿タイプのシングルページ

例えばカスタム投稿名が「kotoridiary」の投稿タイプを追加したとします。
投稿タイプ「kotoridiary」のシングルページの適用テンプレートの優先順位はこのようになります。

  1. single-kotoridiary.php
  2. single.php
  3. index.php

アーカイブと同じで「single-kotoridiary.php」を作れば、投稿タイプ「kotoridiary」専用のシングルページを作成できます。

出力は普通のシングルページと同様です。

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<div class="entry"><?php the_content(); ?></div>
<div class="data"><?php the_time('Y/m/d'); ?></div>
<?php endwhile; endif; ?>

カスタム投稿タイプの月別アーカイブリスト

カスタム投稿タイプのパーマリンク設定」の項で「Custom Post Type Permalinks」プラグインをインストールしていることを前提で話を進めていきます。未だインストールしていない人は一度戻ってインストールしてみてください!

「Custom Post Type Permalinks」をインストールして有効化している状態であれば「wp_get_archives()」に「post_type」パラメーターが追加されているのでカスタム投稿タイプの日付アーカイブリストを表示することができます。

例えば投稿タイプ名が「kotoridiary」のカスタム投稿タイプの月別アーカイブリストを表示する場合、このようなタグになります。

<ul>
<?php wp_get_archives('type=monthly&post_type=kotoridiary'); ?>
</ul>

これを使ってサイドバー等に月別アーカイブリストを表示しましょう。

カスタム投稿タイプのカレンダー

カスタム投稿タイプのカレンダーに関しては別で記事を書いたのでそれを参考にしてください。
簡単に表示することができます。

カスタム投稿タイプのカレンダーを表示する[WordPress]

カスタム投稿タイプの条件分岐

カスタム投稿タイプで条件分岐する時に使用するタグを紹介します。

投稿タイプ名で条件分岐(アーカイブページ、シングルページ)

<?php if ( get_post_type() === 'kotoridiary' ): ?>
投稿タイプ名がkotoridiaryの時のみ表示
<?php endif; ?>

カスタム投稿タイプのアーカイブページのみ

<?php if(is_post_type_archive()): ?>
カスタム投稿タイプのアーカイブページの時のみ表示
<?php endif; ?>

カスタムタクソノミーのテンプレートやタグ

カスタムタクソノミーのアーカイブページ

タクソノミーページとも言います。
カテゴリーページのタクソノミー版ようなものと思ってください。

例えばタクソノミー名が「kotoricategory」でターム名が「panda」だとするとタクソノミーページの適用テンプレートの優先順位はこのようになります。

  1. taxonomy-kotoricategory-panda.php
  2. taxonomy-kotoricategory.php
  3. taxonomy.php
  4. archive.php
  5. index.php

「taxonomy-kotoricategory-panda.php」を作れば、ターム「panda」専用のアーカイブページを作成できますし
「taxonomy-kotoricategory.php」を作れば、タクソノミー「kotoricategory」専用のアーカイブページを作成できます。

一応ループのタグも載せておきます。といっても普通にループするだけなのですが。

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<div class="entry"><?php the_content(); ?></div>
<div class="data"><?php the_time('Y/m/d'); ?></div>
<div class="term"><?php the_terms($post->ID,'kotoricategory'); ?></div>
<?php endwhile; endif; ?>

記事が属するタームの表示

上の参考コードでも出しましたが記事が属するタームをリンク付きで表示するタグです。
ループの中で使用します。「kotoricategory」はタクソノミー名です。適宜変更してください。

<?php the_terms($post->ID,'kotoricategory'); ?>

リンク無しならこんな感じになります。

<?php
$terms = get_the_terms($post->ID,'kotoricategory');
foreach($terms as $term1) :
echo $term1->name;
if ($term1 !== end($terms)) {
	echo ', ';
}
endforeach;
?>

カスタムタクソノミーリスト

サイドバー等に表示するタクソノミーリストはWordPress標準のタグで表示できます。

<ul>
<?php wp_list_categories('title_li=&taxonomy=kotoricategory'); ?>
</ul>

引数の「taxonomy」にタクソノミー名を指定してください。

カスタムタクソノミーの条件分岐

カスタムタクソノミーで条件分岐する時に使用するタグを紹介します。

アーカイブページ用

■タクソノミーページのみ

<?php if(is_tax()): ?>
タクソノミーページの時のみ表示
<?php endif; ?>

■特定のタクソノミーページのみ

<?php if(is_tax('kotoricategory')): ?>
「kotoricategory」のタクソノミーページの時のみ表示
<?php endif; ?>

■特定のタームページのみ

<?php if(is_tax('kotoricategory','good')): ?>
「kotoricategory」タクソノミーの「good」タームのアーカイブページの時のみ表示
<?php endif; ?>

シングルページ用

<?php if(has_term('good', 'kotoricategory', $post)): ?>
記事が「kotoricategory」タクソノミーの「good」タームに属している時のみ表示
<?php endif; ?>

まとめ

結構長くなってしまいましたね。
恐らく、ここで紹介したことを使えば大抵のことには対応できる!!!ような気がします。

しかし、カスタム投稿タイプ関連で他にも大切な情報があったらその都度書き足していこうと思います。
最終的には「この記事を読めばカスタム投稿タイプは大丈夫!」くらいにしたいと思います笑

他にも載せたほうが良い情報ありましたら是非教えてください。

それにしてもWordPressもどんどんバージョンアップしてどんどん新しい機能が追加されていってますね。

カスタム投稿タイプなんかは3.0からの機能になるので結構昔で凄い使えそうだったのですぐチェックしたのですが
カスタムメニューとかウィジェットとかになってくるとKoToRiさっぱりです笑
ちゃんと勉強しないとダメですね。とくにウィジェット超便利そうじゃないですか。テンプレートモンスターか何かのテーマでウィジェットを凄い駆使しているものを見たときは驚きました。
ウィジェットも勉強してちゃんと理解して記事にしていきたいと思います。

シェアする みんなシェアしてね

フォローする フォローする

いつもKOTORI Blogをご覧いただきありがとうございます。Facebook、Twitterを通じて、皆様と交流していき色んな情報を共有していければな~と思ってます。お気軽に登録してください!

基本フォロー返します。

RSSを登録する

RSSはこちらから。

follow us in feedly

Feedly使ってる人はこちらから。

Buy me a Beer

診断ドットコムでちょっとひと息!
動く!パンDのLINEスタンプ
好きな人にアプローチスタンプ
パンDのLINEスタンプ

関連する記事 関連する記事も読んでみてね

コメント

  • Pingback: 【Wordpress】カスタム○○の解説サイトまとめ | ankerlabo.com()

  • Koutarou Miyamoto

    はじめまして。
    非常に素晴らしいまとめで、いつも参考にさせていただいております。
    カスタムタクソノミーのアーカイブページにて投稿をタイトルベースでABC順に表示する方法はございますでしょうか?
    ご教示いただけますと幸いです。
    突然の質問、失礼致しました。

  • Pingback: 投稿と固定ページのビジュアルエディタにそれぞれCSSを適用させる方法()

  • Pingback: カテゴリ一覧の順番を並び替える、一部を非表示する方法 【WordPress】 | 某氏の猫空()

  • Pingback: WordPressをふつうに使っているだけでは知らないかもしれないマイナーな便利関数・ナゾ関数 | nijilog()

  • Pingback: 【study】wordpress | マイブロ()

  • Pingback: 【WP】カスタム投稿のアーカイブページを正しく表示するあれこれ |LAVISON()

  • Pingback: WordPressを始めるのにお世話になったWEBサイト | web:E:note()

  • Pingback: カテゴリーを一旦整理。表示の順番を入れ替えるCategoryOrderandTaxonomyTermsOrderというプラグインを入れました。()

  • みっつ〜

    はじめまして。とてもわかりやすいブログなのでいつも参考にさせていただいています。
    質問です。

    ■状況説明
    通常の投稿ページを「お知らせ」として、
    カスタム投稿ページを「コラム」として、
    使っていて、それぞれアーカイブページで記事全体を表示させ、
    別途個別ページも作成しています。

    ■質問
    この記事の「カスタムタクソノミーリスト」を参考にしまして、無事に「コラム」のページにサイドバーにタームを表示することができましたが、

    そのタームをクリックすると、そのタームの記事ではなく、「お知らせ」ページの記事が表示されてしまいますが、これはなぜでしょうか。
    解決方法を教えていただけると幸いです。

    よろしくお願いします!

    • kotoriblog

      みっつ~さん
      こんばんは。
      コメントありがとうございます。

      実際にページを見てみないと何が原因かハッキリわからないのですが
      タームクリック後のページはtaxonomy.phpのテンプレートですがその辺は大丈夫ですか?
      archive.phpではないですよん。

      taxonomy.php使ってるよってことであれば。。。
      ん~
      もうちょっと詳しい状況が分かれば
      何かお力になれるかもです><

      • みっつ〜

        返信いただきありがとうございます!

        すいません。まだサーバーにアップできていないので、アップしたらお見せしたいのですが。。。

        はい、まさに「taxonomy.php」でした。
        タームをクリックすると、お知らせページには飛ばなくなりましたが、

        コラムの全ての記事(ターム以外の記事)が表示されてしまいます。

        上記には “「taxonomy-kotoricategory-panda.php」を作れば、ターム「panda」専用のアーカイブページを作成” と書いていりますが、

        各ターム毎に表示をさせるにはそれぞれのタームの.phpを作成しなといけないのでしょうか。

        よろしくお願いします。

        • kotoriblog

          あ~なるほど。

          >各ターム毎に表示をさせるにはそれぞれのタームの.phpを作成しなといけないのでしょうか。

          それでも出来ますが面倒なのでtaxonomy.phpを一つ作って
          「query_posts」とか使わずに普通にループさせればタームのページ毎に表示を変えてくれます。(なんて説明すればいいかわからない。。。)

          もし「query_posts」とかで条件付けたいのであれば、条件を全部設定しなおす必要があるので「get_query_var()」を使って、パブリック・クエリ変数を取得して条件に入れてあげます。

          例えば投稿タイプ「kotori」でタクソノミー「kotoricategory」の一覧を20件表示する場合は下記のような感じの指定になります。
          (ループの最初の方だけ書いときます。)

          $termsp = get_query_var(‘term’);
          query_posts(“post_type=kotori&kotoricategory=$termsp&showposts=20”);
          if(have_posts()): while(have_posts()): the_post();

          動作確認はしてません><
          「get_query_var()」はかなり使いますのでこの機会に是非マスターしてみてください。

          • みっつ〜

            ・・・・だめだー!!!
            おっしゃっていることが理解できない・・・・。
            もうすぐサーバーにアップするので、
            それからのほうがいいですよね・・・。

          • kotoriblog

            みっつ~さん
            説明が上手にできなくてすみません笑

            じゃあ初期段階として試しに
            1.taxonomy.phpを作成する
            2.作ったtaxonomy.phpに下記コードだけ入力

            <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

            <h1><a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a></h1>

            <?php endwhile; endif; ?>

            3.「コラム」ページのサイドバーのタームリストから各ページに飛んでみる

            多分ターム毎に表示結果が変わってると思います。

            試してみてください。

            検討違いなこと言ってたらゴメンなさい><

          • kotoriblog

            みっつ~さん

            サイトオープンおめでとうございます。

            やはりみっつ~さんがやりたい事は、WordPressのアーカイブテンプレートの基本を理解すれば難しいことでは無いと思います。
            近々アーカイブテンプレートの基本的な考え方を記事にしようとは思いますが、中々時間がとれそうにないのでとりあえずコメントで書きますね。

            因みに一個前にコメントしたtaxonomy.phpは作ってみましたか?
            一個前にコメントした通りにtaxonomy.phpを作ってやればなんとなく分かると思います。

            みっつ~さんのサイトの「コラム」で説明します。

            >①各記事をクリックして表示されるページに緑枠で囲まれた「イベントのお知らせ」や「咲き誇リンクプロジェクト」がタームという扱いなのですが、
            >今はそこはクリックできない状態になっていますが、できれば
            >クリックしたらそのタームに関する記事だけ表示させるようにしたいと思っています。

            これはtaxonomy.phpを使用します。
            taxonomy.phpというファイルを作成して表示したいコードを記述します。
            記事を表示するためのループタグは取り合えず一個前のコメントに書いたものでよいです。
            taxonomy.phpを作成したら、
            管理画面から表示したい「コラム」内のタクソノミーをクリックして
            記事が入ってるタームの「表示」をクリックして先ほど作成した「taxonomy.php」が表示されるか確認してください。

            正常に表示される場合、「表示」をクリックしたタームの記事だけが一覧表示されるはずです。

            表示されない場合は管理画面の「設定」→「パーマリンク設定」で「変更を保存」をクリックしてもう一度試して下さい。

            >②サイドバーは今は「お知らせ(コラム)タイトル一覧」だけなのですが、
            >本当は
            >イベントのお知らせ(5)
            >プレスリリース(2)
            >などのようにターム名とその記事数を表示するサイドバーも設置したいと思っています。

            これはこの記事の「カスタムタクソノミーリスト」のコードを使用すれば可能です。

            取り合えずtaxonomy.phpを作って試してみてください。

  • Pingback: WordPress の single.php を投稿フォーマットで振り分ける方法 | Design Hack and Slash()

  • Pingback: WordPress カスタム投稿タイプを使うときの注意点 | Design Hack and Slash()

  • Pingback: WordPress「カスタム投稿タイプ」を作ろう! | 人材採用の総合広告代理店 インビジョン株式会社()