【WordPress】カスタム投稿タイプをプラグインなしで追加する方法
![]()
WordPressで標準で入っている「投稿」以外に、例えば「商品情報」など別の投稿を作成したい時、「カスタム投稿タイプ」を追加します。
作り方は「Custom Post Type UI」や「Toolset Types」等のプラグインを使って追加する方法と、プラグインは使わずにテーマファイルの「functions.php」に書き込む方法がありますが、シンプルなものであればプラグインを使わなくても割と簡単にfunctions.phpに追加するだけで追加できて使い回しも簡単にできます。
今回はプラグインを使わずにfunctions.phpに書き込む方法をメモします。
カスタム投稿タイプをプラグインなしで追加する方法
カスタム投稿タイプとは
カスタム投稿タイプは独自の投稿を作るイメージで、標準の「投稿」とは別にオリジナルの「投稿」を作ること。
同じ投稿内でカテゴリーを分けて投稿するより、投稿自体が別になっているほうが入力しやすい場合もあるので、投稿する人が使いやすくなったりします。
プラグインを使わずにカスタム投稿タイプを追加
カスタム投稿タイプを作成できる関数は「register_post_type」です。
functions.phpに以下のようなコードを追加することで、カスタム投稿を定義します。
例えば「aaa_post」というカスタム投稿タイプを追加するとします。
//カスタム投稿タイプ
add_action( 'init', 'create_post_type01' );
function create_post_type01() {
register_post_type( 'aaa_post', //カスタム投稿名
array(
'labels' => array(
'name' => __( 'AAA' ), //カスタム投稿のラベル
'singular_name' => __( 'AAA' ),
'add_new_item' => __('AAAを追加'),
'edit_item' => __('AAAを編集'),
'new_item' => __('AAAを追加')
),
'public' => true, //投稿の公開
'supports' => array('title','editor'), //タイトルと本文を有効化
'menu_position' =>5, //メニューの位置
'show_ui' => true, //カスタム投稿タイプを表示するかどうか
'has_archive' => true, //アーカイブの生成
'hierarchical' => false, //階層構造の有無
'show_in_rest' => true, //Gutenberg(ブロックエディタ)に対応
'rewrite' => array('width_front' => false), //パーマリンクの設定
)
);
}
labelsは管理画面の左側メニューで表示されるメニュー名、カスタム投稿のラベルを決めます。
上記は「AAA」と表示する場合を例に記載しました。任意の値を入力してください。
supportsは投稿内で使うフィールドです。上記はタイトルと本文を表示するようにしています。
上記の記載でカスタム投稿タイプは入力できるようになりますが、更に詳細なオプションを追加したい場合や、その他の「register_post_type」の詳細については「関数リファレンス(WordPress Codex)」で確認ください。
プラグインを使わずにカスタムタクソノミーを追加する方法
カスタムタクソノミーを追加する関数は、「register_taxonomy」です。
「functions.php」に以下のようなコードを追加することで追加することができます。
add_action( 'init', 'add_custom_tax' );
function add_custom_tax() {
register_taxonomy(
'aaa_post_cat',//カスタムタクソノミー名
'aaa_post',//カスタム投稿名
array(
'hierarchical' => true, //階層構造の有無。falseでタグ形式
'label' => 'AAAカテゴリー', //タクソノミーのラベル
'singular_label' => 'AAAカテゴリー', //タクソノミーのラベル
'public' => true, //検索可能にするかどうか trueで可能
'show_ui' => true //タームを管理するためにデフォルトのUIを用意
)
);
}
「aaa_post」は先ほど足したカスタム投稿名で、カスタム投稿名の中に「aaa_post_cat」というカスタムタクソノミーを追加する定義を記載しています。
「register_taxonomy」関数のその他詳細については「関数リファレンス」をご確認ください。
カスタム投稿タイプとカスタムタクソノミーを一度に記載
カスタム投稿タイプとカスタムタクソノミーをセットで記載すると、functions.php上もわかりやすく見た目スッキリします。 タクソノミーが不要なときは、その部分だけコメントアウトすればいいので、このセットをコピーして使い回ししてもいいかもしれません。
//カスタム投稿タイプ
add_action( 'init', 'create_post_type01' );
function create_post_type01() {
register_post_type( 'aaa_post', //カスタム投稿名
array(
'labels' => array(
'name' => __( 'AAA' ), //カスタム投稿のラベル
'singular_name' => __( 'AAA' ),
'add_new_item' => __('AAAを追加'),
'edit_item' => __('AAAを編集'),
'new_item' => __('AAAを追加')
),
'public' => true, //投稿の公開
'supports' => array('title','editor'), //タイトルと本文を有効化
'menu_position' =>5, //メニューの位置
'show_ui' => true, //カスタム投稿タイプを表示するかどうか
'has_archive' => true, //アーカイブの生成
'hierarchical' => false, //階層構造の有無
'show_in_rest' => true, //Gutenberg(ブロックエディタ)に対応
'rewrite' => array('width_front' => false), //パーマリンクの設定
)
);
//カスタムタクソノミー
register_taxonomy(
'aaa_post_cat',
'aaa_post',
array(
'hierarchical' => true, //階層構造の有無。falseでタグ形式
'label' => 'AAAカテゴリー', //タクソノミーのラベル
'singular_label' => 'AAAカテゴリー', //タクソノミーのラベル
'public' => true, //検索可能にするかどうか trueで可能
'show_ui' => true //タームを管理するためにデフォルトのUIを用意
)
);
}
プラグインを使わずにカスタム投稿タイプやカスタムタクソノミーを追加する場合に、参考になればぜひご利用ください。


