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をしっかり設定するのがカギ
公式ドキュメント
- WordPress Developer Resources: register_post_type()