カスタム投稿タイプ(Custom Post Type)の導入と使い方 [WordPress 3.0]


前回取り上げたカスタムタクソノミーはなんだか既存のサイトには使いづらい雰囲気満載でしたが、今回取り上げるカスタム投稿タイプは期待度満点。

投稿やページとは別に、思うままにカスタマイズした投稿タイプを作成できます。導入方法、機能の概要、表示方法を順に見ていきましょう。

カスタム投稿タイプの導入方法

カスタム投稿タイプについて、カスタムタクソノミーの時と同様、プラグインを使う方法と、直接コードを書く方法があります。

プラグインを使う

前回も登場した(というか、こっちが本業の)Custom Post Type UI プラグインを導入します。

custom post type UI プラグイン

Create New Custom Post Type 以下に入力していくと、簡単にカスタム投稿タイプを作成できます。

項目は以下の通り。

  • Post Type Name: (必須)カスタム投稿タイプの名前。コンピュータで読めるように設定する必要があるります。…つまり日本語はダメ→と思ったら通ってしまいました→が、通常の投稿を引っ張ってきてしまうので、やっぱり日本語ダメっぽい。
  • Label: カスタム投稿タイプのラベル。表示名。単語レベルで単数/複数を区別することが少ない日本語ではあまり関係ないありませんが、英語などでは複数形として設定するべきとされています。デフォルトでは、Post Type Name とおなじになるため、表示名を日本語にしたい場合はここで設定してください。
  • Singular Lable: カスタム投稿タイプの名前の単数形を設定します。上述の理由で日本語のラベルではあまり関係ないでしょう。
  • Public: カスタム投稿タイプが管理画面に表示されるかどうかを設定します。デフォルトでは "True"(表示される)。
  • Show UI: "True" にすると、管理画面に管理用の UI が表示されます。"False" にすると、UI は表示されません。
  • Capability Type: 読み書き・削除権限を構成するために使われる、とのことです。設定したタイプと同じ権限になるのだと思われます。デフォルトでは "post"。
  • Hierarchical: カスタム投稿タイプに親子関係を持たせるかどかを設定します。親・子にあたる投稿を指定できるようになります。デフォルトでは "False"。
  • Rewrite: パーマリンクのリライトフォーマットを設定します。デフォルトでは "True"。
  • Custom Rewrite Slug: パーマリンクのデフォルトフォーマットは Post Type Name となっていますが、別のものを使う場合はここに入力します。
  • Query_var: カスタムタクソノミー同様、用途が思いつきませんが、無難に "True" で。
  • Supports: カスタム投稿タイプの新規追加画面で、項目を表示するかどうかを設定できます。
    • Title: タイトル入力欄の表示/非表示
    • Editor:  本文入力欄の表示/非表示
    • Excerpt: 抜粋入力欄の表示/非表示
    • Trackbacks: トラックバック入力欄の表示/非表示
    • Custom Fields: カスタムフィールド入力欄の表示/非表示
    • Comments: ディスカッション設定の表示/非表示
    • Revisions: リビジョンの表示/非表示
    • Post Thumnails: アイキャッチ画像設定の表示/非表示
    • Author: 作成者設定の表示/非表示
    • Page Attributes: ページ属性欄の表示/非表示
    • 以上、何か一つでも指定すれば、一つ以上表示されます。全部チェックを外すと、タイトルと本文のみになります。デフォルトはタイトルと本文のみです。

ソースコードを書く

使用中のテーマの functions.php に以下のコードを追加することでも使用できるようになります。こっちのほうがいろいろ設定できますね(他の変数は 関数リファレンス/register post type – WordPress Codex 日本語版 を参照)。プラグインなどを作成する場合は、以下のコードを参考にしてみてください。

[php]
// カスタム投稿タイプを作成
// create custom post type
function odekon_custom_post_type()
{
$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’)
);
register_post_type(‘bunaikaigi’,$args);
}

add_action(‘init’, ‘odekon_custom_post_type’);
[/php]

ちなみに、menu_position は管理画面のサイドバーでの表示位置を調整できる変数です。5 で投稿の下、10 でメディアの下、20 でページの下、null でデフォルトの一番下になります。…が裏技的に、0 または 1 でダッシュボードの上に、2 または 3 でダッシュボードの下に表示することができるみたいです。

publicly_queryable を true にすると通常のクエリに出てくるはずなんですが、出てこないので、このあと表示するためにがんばることになります。

こ、これがカスタム投稿タイプの力なのかっ!

カスタム投稿の新規追加

カスタム投稿タイプとして「ヘッドライン」という項目を作ってみました。Supports はタイトルと本文というシンプル構成です。これでもう、「おでこくん、Trackbacks というのはなにを入力したらよいのかね」などとクライアント(部長とか)に言わせたりはしません。「これがカスタム投稿タイプの力なのかっ!」と言わせてみせよう、ホトトギス。

カスタム投稿の一覧

通常の投稿と同じように、ヘッドラインの記事だけが並ぶ専用の一覧画面もできます。これは分かりやすい。

カスタム投稿タイプを表示する

案の定表示されません

でもって、index.php を見ると案の定表示されません…。カスタムタクソノミーのときと同じように通常のクエリに含んでくれないみたいなんですね。

というわけで、TwentyTen テーマの loop.php の

[php]
<?php
/* Start the Loop.
*
* In Twenty Ten we use the same loop in multiple contexts.
* It is broken into three main parts: when we’re displaying
* posts that are in the gallery category, when we’re displaying
* posts in the asides category, and finally all other posts.
*
* Additionally, we sometimes check for whether we are on an
* archive page, a search page, etc., allowing for small differences
* in the loop on each template without actually duplicating
* the rest of the loop that is shared.
*
* Without further ado, the loop:
*/ ?>
[/php]

の後あたりに以下を追加してみました。

[php]
<?php $loop = new WP_Query( array( ‘post_type’ => ‘headline’, ‘posts_per_page’ => 5 ) ); ?>

<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( ‘Permalink to %s’, ‘twentyten’ ), the_title_attribute( ‘echo=0’ ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>

<div class="entry-meta">
<?php twentyten_posted_on(); ?>
</div><!– .entry-meta –>

<div class="entry-content">
<?php the_content(); ?>
</div>
</div>
<?php endwhile; ?>
[/php]

すると…

表示されました!

無事表示されました。内容は今適当に考えましたが、会社の部署のイントラサイトを WordPress 3.0 で作ろうかなと思っているのでその実験を兼ねています。

投稿の新規追加をシンプルに絞ったのもそのためですね。まだまだ仕様の通りになっていなかったり、うまくできなかったりするところもありますが、カスタム投稿タイプはすごくいいよいいよー!


“カスタム投稿タイプ(Custom Post Type)の導入と使い方 [WordPress 3.0]” への32件のフィードバック

  1. 有意義なご説明をありがとうございます。

    「カスタム投稿タイプを表示する」について質問です。

    メインページ(index.php)にカスタム投稿タイプを表示するときのカスタマイズ方法をご記述頂いておりますが、特定の「ページ」に、同じような表示を行なうことは可能ですか?

  2. […] よく更新するページで定型的なカスタム投稿のレイアウトを作ろうと、おでこんの記事を見ながらいろいろ実験です。最初 Custom Post Type UI プラグインを入れてみたのですが英語だったりして設定がよくわからず挫折。もう一つの方法で、ソースを functions.php に追加してみるも、下書きが全部公開されてしまう。使えないことはないが、即公開されてしまうのは困る。 […]

  3. 貴重な情報ありがとうございます。
    質問がございます。

    custom post typeを導入したのですが、タスクノミーで入力した値がサイトに表示されません。
    例えば、「WP」というタスクノミーに対して「3.0」を入力した場合、どのようなPHPコード・テンプレートタグを書くと、サイトに表示されるのでしょうか?

    ご教授していただければ、幸いです。
    よろしくお願いいたします。

  4. […] —– ◆WordPressで「カスタム投稿」と「カスタムフィールドテンプレート」 | 8works ◆WordPress 3.1 から使う、カスタムポストタイプの設定から表示までのまとめ …的なもの – Website Tips ノート : VARL ◆カスタム投稿タイプ(Custom Post Type)の導入と使い方 [WordPress 3.0] | 8bitodyssey.com […]

  5. […] —– ◆WordPressで「カスタム投稿」と「カスタムフィールドテンプレート」 | 8works ◆WordPress 3.1 から使う、カスタムポストタイプの設定から表示までのまとめ …的なもの – Website Tips ノート : VARL ◆カスタム投稿タイプ(Custom Post Type)の導入と使い方 [WordPress 3.0] | 8bitodyssey.com […]

フォームは コメントしてほしそうに こちらを見ている……!

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください