概要
プラグインを使わずfunctions.phpだけでカスタム投稿タイプを追加することができる関数。
カスタム投稿タイプについては以下を参照。
📄 カスタム投稿タイプを使いこなす!初心者向けチュートリアル
プラグインとの使い分け
プラグイン「Custom Post Type UI」を使えば、register_post_type
を使わなくてもカスタム投稿タイプを追加できる。
プラグインがおすすめの場面
- 簡単に実装したい🔰
- プラグインを増やすことに抵抗がない
register_post_typeがおすすめの場面
- ある程度WordPressに詳しい
- プラグインを増やしたくない
関数の説明
引数・戻り値
register_post_type( $post_type, $args );
引数
Name | 型 | 説明 | 初期値 |
---|---|---|---|
$post_type | string |
登録したい投稿タイプ名。
最大 20 文字、大文字や空白は禁止。 | なし |
$args(任意) | array | 投稿タイプの設定。 | なし |
【補足】第二引数$argsの詳細
- カスタム投稿タイプの細かい設定ができる。
よく使う設定
キー | 型 | 説明 | 初期値 |
---|---|---|---|
public | bool | カスタム投稿タイプを有効(公開)にするか。falseだと無効(非公開)。 | false |
label | string | 管理画面などで表示する投稿タイプの名称。日本語でもOK。 | $post_type |
labels | array | 「管理画面に表示される言葉」を細かく設定できる。※1 | 投稿または固定ページと同じ言葉になる。(hierarchicalがtrueなら固定ページの言葉が採用される) |
description | string | カスタム投稿タイプの説明文。 | ‘’ |
hierarchical | bool | 投稿同士で親子関係を持たせられるようにするか。(例えば投稿はfalse、固定ページはtrueになっている。) | false |
taxonomies | array | カスタム投稿タイプで使用するタクソノミー(category, tagなど) | なし |
has_archive | bool,string |
カスタム投稿タイプのアーカイブページを生成するか。
trueを指定した場合:アーカイブページのスラッグは$post_typeになる。 文字列を指定した場合:その文字列がアーカイブページのスラッグになる。 ※ファイル編集後リライトルールの更新([設定-パーマリンク設定]を更新)しないと反映されない。 | false |
show_in_rest | bool | ブロックエディタ(グーテンベルク)を有効化する。(trueのときはカスタム投稿タイプをREST APIに含まれる) | false |
supports | bool,array |
add_post_type_support() を直接呼び出し、カスタム投稿タイプの編集ページに出てくる項目を追加する。
falseを指定するとすべて非表示。 ※投稿画面から本文などを削除する場合 remove_post_type_support 関数を使うことが多いがカスタム投稿タイプでは使わない。ここで'supports' => array(’title’) のように指定して最初から本文は有効化しない!
|
array(’title’, ‘editor’)
(タイトル欄、本文欄が表示される) |
menu_position | int |
管理画面のサイドバーの何番目に表示されるか。
(show_in_menuがtrueのときのみ有効) • 5 - 投稿の下 • 10 - メディアの下 • 15 - リンクの下 • 20 - 固定ページの下 • 25 - コメントの下 • 60 - 最初の区切りの下(コメントの下に区切りがある) • 65 - プラグインの下 • 70 - ユーザーの下 • 75 - ツールの下 • 80 - 設定の下 • 100 - 二つ目の区切りの下(設定の下に区切りがある) | null(コメントの下) |
あまり使わない設定
キー | 型 | 説明 | 初期値 |
---|---|---|---|
publicly_queryable | bool | カスタム投稿タイプを取得するクエリが実行可能か(公開可能か)。→アーカイブページでカスタム投稿タイプを取得できるか。(falseにするとプレビューも表示もできない) | publicと同じ |
exclude_from_search | bool | カスタム投稿タイプを検索結果から除外するか。 | publicの反対 |
show_ui | bool | 管理画面でカスタム投稿タイプ管理ページを表示するか。 | publicと同じ |
show_in_nav_menus | bool | ナビゲーションメニューにカスタム投稿タイプを表示するか。 | publicと同じ |
show_in_menu | bool |
管理画面のサイドバーにカスタム投稿タイプを表示する。
(show_uiがtrueのときのみ有効) | publicと同じ |
show_in_admin_bar | bool | カスタム投稿タイプを管理バーから使えるか。 | show_in_menuと同じ |
menu_icon | string |
管理画面のサイドバーに表示されるアイコン。
get_template_directory_uri() . "images/icon.png” のようにして画像を指定できる。
| null(投稿と同じアイコン) |
capabilities | array |
カスタム投稿タイプの権限名を定義する。独自の権限グループを作成するときにこの権限名を使う。(map_meta_capがtrueのときのみ有効)
参考サイト:https://2inc.org/blog/2013/05/15/3244/ | capability_typeによる |
capability_type | array,string |
カスタム投稿タイプの権限の種類を定義する。独自の権限グループを作成するときにこの権限の種類を使う。独自の種類を定義しておけば[投稿][固定ページ]と分けて権限を設定できる。
参考サイト:https://2inc.org/blog/2013/05/15/3244/ | ‘post’(投稿と同じグループ) |
map_meta_cap | bool |
WordPressがもつデフォルトのメタ権限(read、delete_posts、delete_private_posts、delete_published_posts、delete_others_posts、edit_published_posts、edit_private_posts)を使用可能にする。
参考サイト:https://2inc.org/blog/2013/05/15/3244/ | null |
register_meta_box_cb | callback | 編集ページにメタボックスを追加/削除するときに使う。メタボックスを追加/削除する処理(add_meta_box/remove_meta_box)を使った処理をコールバック関数に指定する。 | null |
rewrite | bool,array |
カスタム投稿タイプのパーマリンク構造を変更する。
※変更後に[設定−パーマリンク]で変更の保存をしないと反映されない。 |
true(パーマリンクは$post_type/スラッグ )
|
query_var | bool,string | カスタム投稿タイプのページをクエリパラメータでアクセスできるようにする。クエリパラメータによるアクセスが不要な場合はfalse。 |
true(example.com/?$post_type=値 でアクセス可能になる)
|
can_export | bool | カスタム投稿タイプがエクスポート可能か。 | true |
※1:labelsの設定内容
詳細は以下の公式ドキュメントを参照。
【注意】指定NGな投稿タイプ名
第一引数に以下の文字列を指定してはいけない。
(デフォルトで用意されている投稿タイプ名と重複してしまうため)
- post
- page
- attachment
- revision
- nav_menu_item
- action
- order
- theme
戻り値
カスタム投稿タイプの登録に成功した場合:登録された投稿タイプのオブジェクト
カスタム投稿タイプの登録に失敗した場合:エラーオブジェクト
使用例
カスタム投稿タイプ[hoge]を追加する。
// カスタム投稿タイプを登録する
function register_post_hoge() {
$args = array(
'public' => true, // 管理画面、サイトに公開
'label' => 'hoge' // 管理画面上のカスタム投稿タイプの名前「hoge」
);
// カスタム投稿タイプを登録
register_post_type( 'hoge', $args );
}
// アクションフックに登録
add_action( 'init', 'register_post_hoge' );
解説
-
register_post_hoge()
- カスタム投稿タイプを登録する関数を用意。
-
register_post_type( 'hoge', $args );
で登録する。 -
詳細な情報は
$args
で設定
-
add_action( 'init', 'register_post_hoge' );
-
アクションフック
init
にカスタム投稿タイプ登録処理を追加する。
-
アクションフック
関連記事
実践的な例
カスタム投稿タイプ[FAQ]を追加する。
function create_my_post_types() {
// FAQ カスタム投稿タイプを登録
register_post_type(
"faq-post", // 投稿タイプ名(スラッグになる)
array(
'public' => true, // 管理画面、サイトにFAQを表示する
'label' => 'FAQ', // 管理画面上のカスタム投稿タイプの名前
'labels' => array( // 管理画面[FAQ]に表示される言葉
'add_new' => '新規FAQ追加',
'edit_item' => 'FAQの編集',
'view_item' => 'FAQを表示',
'search_items' => 'FAQを検索',
'not_found' => 'FAQは見つかりませんでした。',
'not_found_in_trash' => 'ゴミ箱にFAQはありませんでした。',
),
'description' => 'FAQの投稿に使用します。', //説明文
'has_archive' => true, // アーカイブページを生成する
'show_in_rest' => true, // ブロックエディタを有効化
'supports' => array( // 編集画面に表示する項目(add_post_type_supportと同じ)
'title', // タイトル
'editor', // 本文の編集機能
'thumbnail', // アイキャッチ画像(add_theme_support('post-thumbnails')が必要)
'excerpt', // 抜粋
'custom-fields', // カスタムフィールド
'revisions' // リビジョンを保存
),
'menu_position' => 5, // 管理画面のサイドバー[投稿]の下に[FAQ]を追加する
'taxonomies' => array('faq-kind'), // 使用するタクソノミー("faq-kind"を使用)
)
);
}
//init アクションフックで登録
add_action('init', 'create_my_post_types');
注意
register_post_type(…)でカスタム投稿タイプを登録した後は、[設定-パーマリンク]で更新すること⚠
アレンジ
カスタム投稿タイプの個別ページを生成しない
あまりない要件だが、以下のような場合の方法。
方法
引数を以下のようにする。
'public' => false, // カスタム投稿タイプを非公開にする
// publicをfalseにすると、自動で以下もすべてfalseになってしまうので明示的にtrueを指定
'publicly_queryable' => true, // アーカイブページでは取得可能
'show_ui' => true, // 管理画面に表示
'show_in_nav_menus' => true, // ナビゲーションメニューに表示
'show_in_menu' => true, // 管理画面のサイドバーに表示
具体例
function create_my_post_types() {
// FAQ カスタム投稿タイプを登録
register_post_type(
"faq-post",
array(
'public' => false, // カスタム投稿タイプを非公開
'publicly_queryable' => true, // 一覧ページでは取得可能
'show_ui' => true, // 管理画面に表示
'show_in_nav_menus' => true, // ナビゲーションメニューに表示
'show_in_menu' => true, // 管理画面のサイドバーに表示
// 以下は通常どおり指定する
'label' => 'FAQ',
'labels' => array(
'add_new' => '新規FAQ追加',
'edit_item' => 'FAQの編集',
'view_item' => 'FAQを表示',
'search_items' => 'FAQを検索',
'not_found' => 'FAQは見つかりませんでした。',
'not_found_in_trash' => 'ゴミ箱にFAQはありませんでした。',
),
'description' => 'FAQの投稿に使用します。',
'has_archive' => true,
'show_in_rest' => true,
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt',
'custom-fields',
'revisions'
),
'menu_position' => 5,
'taxonomies' => array('faq-kind'),
)
);
}
//init アクションフックで登録
add_action('init', 'create_my_post_types');
参考サイト