カスタム投稿タイプでオリジナル投稿を作る

更新2022/02/24

WordPressのデフォルトでは「投稿」というメニューで記事を作成し投稿します。

「投稿」とは別にコンテンツの管理をしたい時は、「カスタム投稿タイプ」というものを作って分けることができます。

カスタム投稿タイプは「プラグインを利用して作成する」か「phpを使って作成する」といった方法で作ることができます。

プラグインで手軽に投稿タイプを作る

手軽に作るならプラグインです。また自作のオリジナルテーマではなく、WordPressのテンプレートテーマを使っていてテーマを変える可能性があるのであればプラグインを使った方がいいと思います。

カスタム投稿タイプを作るプラグインならこちらがおすすめです。
【Custom Post Type UI】https://ja.wordpress.org/plugins/custom-post-type-ui/

プラグインを使わずに投稿タイプを作る

コードに慣れている、プラグインはあまり使いたくない場合は自分で作ります。またプラグインは機能が決まっているため、思う通りのカスタム投稿タイプがプラグインで作れない場合も自作する必要があります。

カスタム投稿を作成するだけならそんなに難しくはありません。functions.php に以下のようなコードを記述します。

// カスタム投稿タイプの追加
add_action('init', 'create_post_type');
function create_post_type() {
  // 投稿画面に表示するテキストを指定。初期値は「投稿」
  $labels = [
    'name' => '投稿タイプ名',
    'all_items' => 'すべての投稿を表すテキスト',
    'add_new_item' => '新規追加を表すテキスト',
    'edit_item' => '編集を表すテキスト',
    'singular_name' => __('カスタム投稿タイプ')
  ];
  // 投稿タイプで追加・編集できる要素を指定。初期値はtitleとeditor。
  $supports = [
    'title',
    'editor',
    'thumbnail',
    'author',
    'custom-fields',
    'comments',
    'revisions',
  ];
  $args = [
    'labels' => $labels,
    'public'  => true,
    'hierarchical'  => false,
    'has_archive'   => true,
    'supports'      => $supports,
    'menu_position' => 5,
    'taxonomies'    => array('new_category','new_tag'),
    'show_in_rest' => true,
  ];
  register_post_type('custom_post_name',$args);
}

このコードをそのまま貼り付けるだけで、投稿タイプは追加されます。

コードを追加したのに投稿タイプが表示されない場合、パーマリンク設定画面で「変更を保存」ボタンをクリックし、リロードして表示されるか確認してみてください。

カスタム投稿の名前はなんでもいいわけではない

カスタム投稿タイプの名前は、一部使えない名称があるため注意が必要です。すでにWordPressで使われている投稿タイプやWordPressの機能に干渉する名前は使用できません。

すでにWordPressで使われている投稿タイプ

  • post
  • page
  • attachment
  • revision
  • nav_menu_item
  • custom_css
  • customize_changeset
  • oembed_cache
  • user_request
  • wp_block

WordPressの機能に干渉する名前

  • action
  • author
  • order
  • theme

【参照】register_post_type() | Function | WordPress Developer Resources

この他、wp_ から始まる名前も使わない方がいいようです。今後WordPressの開発が進むにつれて投稿タイプ名に使用される可能性が高いためです。

投稿タイプ作成のコードの詳細

それぞれのコードがどういったことを設定しているのか、詳細を記していきます。

    $args = [
      'labels' => $labels,
      'public'  => true,
      'hierarchical'  => false,
      'has_archive'   => true,
      'supports'      => $supports,
      'menu_position' => 5,
      'taxonomies'    => array('new_category','new_tag'),
    ];

$labels や $supports は、$args の前に設定している内容です。
私は配列で設定するものは先にまとめます。その方が見やすく変更しやすいというのと、複数投稿タイプを作成するときも使い回しがしやすいことが理由です。

プロパティ
label 投稿画面に表示するテキストの指定
public

true・false(初期値はfalse)

管理画面から投稿・編集できるようにする場合は「true」
trueの場合は投稿タイプを公開。falseの場合は投稿タイプを公開せず管理画面からも使用不可)

hierarchical

true・false(初期値はfalse)

trueの場合は階層の指定ができる。
has_archive

true・false(初期値はfalse)

カスタム投稿の一覧ページが必要な場合は「true」。

menu_position
管理画面で投稿タイプが表示されるメニューの位置。5は「投稿の下」に表示。 初期値は「コメントの下」
taxonomies
設定するカスタムタクソノミーを配列で指定。カスタムタクソノミーはregister_taxonomy関数で登録。初期値はタクソノミー無し
register_taxonomy_for_object_type() を直接呼び出す代わりに使用可能。
show_in_rest

true・false(初期値はfalse)

RESET APIの使用。グーテンベルクを使用するときはtrue、クラシックエディタを利用したい場合はfalseにする。

register_post_type(‘投稿タイプ名’, 設定配列(ここでは$args))
この関数でカスタム投稿を登録。
add_action(‘init’, ‘投稿タイプ名’);
この関数で register_post_type() を実行

さらにカスタムする

ただカスタム投稿メニューを作るだけでは「投稿」や「固定ページ」とそんなに変わらない投稿画面ができあがるだけです。
さらに投稿をカスタマイズしたい時は、カスタムフィールド やカスタムタクソノミーなども組み合わていきます。これによってより一層使いやすい投稿画面に。

メニューのアイコン変えたい

デフォルトのメニューアイコンを変更することもできます。

function menu_icon_change(){
  echo '<style>
  #adminmenu #menu-posts-custom_post_name .dashicons-admin-post:before {
    content: "\f307";
  }
  </style>';
}
add_action('admin_head', 'menu_icon_change');

メニュー項目のidやclass名を指定してスタイルを追加しています。各メニュー項目に固有のidがあるので親クラスにそれを指定し、.dashicons-admin-post:before でアイコンフォントを上書きします。
この方法で下記のようにアイコンを変更することができました。

一覧ページと詳細ページを表示する

カスタム投稿タイプには一覧・詳細ページのテンプレートも追加する必要があります。

カスタム投稿用のテンプレートファイルを作成

WordPressでは各ページに使用されるテンプレートファイルが、ファイル名で決められています。

一覧ページに使用されるテンプレートファイル

  • archive-post_type_name.php
  • archive.php

個別ページに使用されるテンプレートファイル

  • single-post_type_name.php
  • single.php

これらのテンプレートファイルがない場合、index.php が使用されます。

「post_type_name」には投稿タイプ名に付けた名前が入ります。投稿タイプ名が product なら「archive-product.php」となります。

投稿タイプごとにファイルを分けたい場合は投稿タイプ名を追加したファイルを作り、同じファイルを使用するなら archive.php や single.php でOK。

ページが表示されるかアクセスしてみる

カスタム投稿タイプ、投稿タイプのテンプレートファイルを作成したら、ちゃんとページが表示されるか確認してみましょう。

ページが表示されない場合、パーマリンク設定やコードの記述ミスがないか確認しましょう。

カテゴリー : WordPress

タグ :

TOPへ