【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を用意 ) ); }
プラグインを使わずにカスタム投稿タイプやカスタムタクソノミーを追加する場合に、参考になればぜひご利用ください。