【WordPress】カスタム投稿タイプをプラグインなしで追加する方法

Pocket

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を用意
     )
   );
}

プラグインを使わずにカスタム投稿タイプやカスタムタクソノミーを追加する場合に、参考になればぜひご利用ください。

この記事が気に入ったら
いいね ! しよう

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です