Help us understand the problem. What is going on with this article?

Wordpress カスタム投稿タイプの作り方

More than 3 years have passed since last update.

まえがき

Wordpress でカスタム投稿を作るのに都度 Codex 見に行ってたけど、いい加減覚えようと思い、メモ。
カンニングシートでもあるけど。

functions.php にコードを追加

カスタム投稿タイプを作るために functions.php にコードを追加します。
細かい設定は Codex を参照してください。

functions.php
function create_post_type() {
  $exampleSupports = [  // supports のパラメータを設定する配列(初期値だと title と editor のみ投稿画面で使える)
    'title',  // 記事タイトル
    'editor',  // 記事本文
    'thumbnail',  // アイキャッチ画像
    'revisions'  // リビジョン
  ];
  register_post_type( 'example',  // カスタム投稿名
    array(
      'label' => 'テストカスタム投稿',  // 管理画面の左メニューに表示されるテキスト
      'public' => true,  // 投稿タイプをパブリックにするか否か
      'has_archive' => true,  // アーカイブを有効にするか否か
      'menu_position' => 5,  // 管理画面上でどこに配置するか今回の場合は「投稿」の下に配置
      'supports' => $exampleSupports  // 投稿画面でどのmoduleを使うか的な設定
    )
  );
}
add_action( 'init', 'create_post_type' ); // アクションに上記関数をフックします

カスタム投稿タイプにタクソノミーを追加する

上記で追記した設定だけでもカスタム投稿タイプは出来ますが、カスタム投稿タイプに独自のタクソノミー(カテゴリ的なもの)を追加しなければならない案件が多いと思うので、更に functions.php にコードを追加します。
追加する位置は先程の create_post_type() の中に追加してください。

functions.php
register_taxonomy(
  'example_taxonomy',  // 追加するタクソノミー名(英小文字とアンダースコアのみ)
  'example',  // どのカスタム投稿タイプに追加するか
  array(
    'label' => 'テストタクソノミー',  // 管理画面上に表示される名前(投稿で言うカテゴリー)
    'labels' => array(
      'all_items' => 'タクソノミー一覧',  // 投稿画面の右カラムに表示されるテキスト(投稿で言うカテゴリー一覧)
      'add_new_item' => '新規タクソノミーを追加'  // 投稿画面の右カラムに表示されるカテゴリ追加リンク
    ),
    'hierarchical' => true  // タクソノミーを階層化するか否か(子カテゴリを作れるか否か)
  )
);

追記したコードのまとめ

今回の例で言うと最終的に functions.php は下記のようなコードになります。

functions.php
// アイキャッチ画像を有効
add_theme_support('post-thumbnails');   // カスタム投稿タイプ example で thumbnail を使うので追記

// カスタム投稿タイプ作成
function create_post_type() {
  $exampleSupports = [
    'title',
    'editor',
    'thumbnail',
    'revisions'
  ];

  // add post type
  register_post_type( 'example',
    array(
      'label' => 'テストカスタム投稿',
      'public' => true,
      'has_archive' => true,
      'menu_position' => 5,
      'supports' => $exampleSupports
    )
  );

  // add taxonomy
  register_taxonomy(
    'example_taxonomy',
    'example',
    array(
      'label' => 'テストタクソノミー',
      'labels' => array(
        'all_items' => 'タクソノミー一覧',
        'add_new_item' => '新規タクソノミーを追加'
      ),
      'hierarchical' => true
    )
  );
}

add_action( 'init', 'create_post_type' );

カスタム投稿タイプ用のファイルを追加する

追加した投稿タイプを表示させるために phpファイルを作成します。
今回の例で言うと下記のようなファイルを追加します。

  • archive-example.php カスタム投稿タイプ「example」のアーカイブページ
  • single-example.php カスタム投稿タイプ「example」の記事ページ
  • taxonomy-example_taxonomy.php 追加したタクソノミーページ

これであとは各phpファイル内で、投稿を表示させるコードを記述すれば大丈夫です。
今回はカスタム投稿タイプの作り方と言う事なので投稿を表示させるコードは割愛します。

ただ、カスタム投稿タイプは初期状態だとパーマリンクがイケてないので Custom Post Type Permalinks というプラグインでイイ感じにしてあげてください。
プラグインの使い方は割愛します。

参考サイト

WordPress Codex日本語版(関数リファレンス/register post type)
WordPress Codex日本語版(関数リファレンス/register taxonomy)
WordPressの使い方とカスタマイズ|WordPressの実

nagasawaaaa
フロントエンドエンジニアやってます。 たまにWordPressもやったりします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした