1. WordPress

【徹底解説】register_post_type()でカスタム投稿タイプを作成しよう

Share

WordPressサイトに「ブログ投稿」や「固定ページ」以外の独自コンテンツを追加したいと思ったことはありませんか?

例えば「お知らせ」「製品情報」「イベント情報」など、標準投稿とは別の形式でコンテンツを管理したいときに使うのが「カスタム投稿タイプ」です。

そのカスタム投稿タイプを作成するための関数が、register_post_type() です。

この記事では、register_post_type() の基本から応用までを初心者にもわかりやすく解説します。

register_post_type()とは?

register_post_type() は、WordPressに新しい投稿タイプを追加する関数です。たとえば「news」「portfolio」「product」など、用途に応じた独自の投稿タイプを作成できます。

利用シーンの例

  • 「ニュース」投稿専用の投稿タイプを作成して、ブログとは別に管理
  • 商品情報(product)を登録してEC風の表示に
  • 施工事例、スタッフ紹介、FAQなどコンテンツの分類に

基本的な使い方

function create_custom_post_type() {
  register_post_type('news',
    array(
      'labels' => array(
        'name' => 'お知らせ',
        'singular_name' => 'お知らせ',
      ),
      'public' => true,
      'has_archive' => true,
      'menu_position' => 5,
      'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
      'rewrite' => array('slug' => 'news'),
    )
  );
}
add_action('init', 'create_custom_post_type');

このコードを functions.php に記述するだけで、「お知らせ(news)」という投稿タイプが管理画面に追加されます。

主なパラメータ解説

パラメータ名内容
labels投稿タイプの名前や管理画面の表示名など
publicサイト上に公開するかどうか(true/false)
has_archiveアーカイブページを持つか
menu_position管理画面のメニュー位置
supports使用する機能(タイトル、エディター、アイキャッチ等)
rewriteパーマリンクのスラッグ指定

labelsの詳細(省略せず設定したい場合)

'labels' => array(
  'name'               => '商品',
  'singular_name'      => '商品',
  'add_new'            => '新規追加',
  'add_new_item'       => '新しい商品を追加',
  'edit_item'          => '商品を編集',
  'new_item'           => '新しい商品',
  'view_item'          => '商品を表示',
  'search_items'       => '商品を検索',
  'not_found'          => '商品が見つかりませんでした',
  'not_found_in_trash' => 'ゴミ箱に商品はありません'
)

アーカイブページの作成方法

has_archive => true を指定している場合、自動的に /news/ のようなアーカイブURLが作成されます。

アーカイブページをカスタマイズしたい場合は、テンプレート階層に従って archive-news.php をテーマ内に作成します。

シングルページのテンプレートも用意できる

個別ページをカスタマイズしたい場合は、single-news.php をテーマに追加します。

<?php get_header(); ?>
  <h1><?php the_title(); ?></h1>
  <div><?php the_content(); ?></div>
<?php get_footer(); ?>

投稿タイプの公開/非公開設定

  • public => true:サイト上に表示される通常の投稿タイプ
  • public => false, show_ui => true:管理画面には表示されるが、フロントには出ない非公開タイプ(例:システム用データ)

よくある落とし穴

現象原因と対処法
作成した投稿タイプのアーカイブが 404になるパーマリンク設定の再保存が必要(設定→パーマリンクで「保存」)
管理画面に表示されないshow_ui が false になっている/関数が init より前に実行されている
投稿画面に本文やアイキャッチが出ないsupports の指定不足。必要な項目を明示的に追加する必要あり

まとめ

  • register_post_type() を使うことで独自の投稿タイプを簡単に作成できる
  • 管理画面・URL構造・テンプレートなどを柔軟にカスタマイズ可能
  • 実務レベルでは supports, labels, rewrite, has_archive をしっかり設定するのがカギ

公式ドキュメント