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()