Codeworks Notes

 2019-12-11

 2020-03-04

Wordpress
バックエンド

カスタム投稿タイプの作り方

カスタム投稿タイプとは

投稿タイプのカスタマイズ機能で、通常投稿と別枠で住み分けた投稿枠を設けることができます。

ブログ記事とは別に特集記事を連載するといった時に、記事や一覧のくくりを分ける、という使い方ができるので、別途テンプレートファイルを作って通常投稿とは異なるページデザインにすることも可能です。

カスタム投稿タイプを作るには2通りの方法があります。

  • functions.phpを編集する
  • プラグイン(CustomPostType UI)を使う

プラグインは「CPT UI 使い方」とかで検索すればうじゃうじゃ出てくると思いますので、プラグインを使わない方法を説明します。

つくりかた

functions.phpに以下のコードを追記します。

// カスタム投稿タイプもろもろの設定
add_action( 'init','my_post_type' );
function my_post_type() {

  // 投稿タイプの設定
  register_post_type( 'hoge', // カスタム投稿名の定義
    array(
      // ダッシュボードに表示させる名前
      'labels' => array(
        'name' => __( 'ほげ' ), // 表示する投稿タイプ名
        'singular_name' => __( 'ほげ' ),
        'all_items' => __( 'ほげ一覧' ), // 表示する一覧の名称
      ),
      'public' => true,
      'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ),
      'menu_position' => 5,
      'has_archive' => true,
      'show_in_rest' => true
    )
  );

  // カテゴリの設定(カスタムタクソノミー)
  register_taxonomy(
    'hoge_cat', // カテゴリー名(任意)
    'hoge', // カスタム投稿名
    array(
      'hierarchical' => true, // 階層構造を持たせる
      'update_count_callback' => '_update_post_term_count',
      // ダッシュボードに表示させる名前
      'label' => 'カテゴリー',
      'public' => true,
      'show_ui' => true,
      'show_in_rest' => true
    )
  );

  // タグの設定(カスタムタクソノミー)
  register_taxonomy(
    'hoge_tag', // タグ名(任意)
    'hoge', // カスタム投稿名
    array(
      'hierarchical' => false, // 階層構造を持たない
      'update_count_callback' => '_update_post_term_count',
      // ダッシュボードに表示させる名前
      'label' => 'タグ',
      'public' => true,
      'show_ui' => true,
      'show_in_rest' => true
    )
  );

  // パーマリンク設定の更新
  flush_rewrite_rules( false );
}

補足

URLの表記

http(s)://ドメイン名/カスタム投稿名 になります。

「hoge」部について

投稿タイプの本体です。

ループを作る際、配列の中で post_type = 'hoge' とすることで抽出することができます。

サポート可能な機能

resister_post_type() 'supports' には任意の機能を追加できます。
以下のものから選んで array() に入れましょう。

  • title … タイトル
  • editor … 編集エディタ
  • author … 作成者
  • thumbnail … アイキャッチ画像
  • excerpt … 抜粋
  • trackbacks … トラックバック送信
  • custom-fields … カスタムフィールド
  • comments … コメント
  • revisions … リビジョンの保存
  • page-attributes … メニューの順序
  • post-formats … 投稿フォーマットを追加

thumbnail は現在のテーマが投稿サムネイルをサポートしていないと機能しません。同様に page-attributes も投稿タイプの「hierarchical」が「true」になっていないと働きません。

テンプレートファイル名

  • カスタム投稿ページを表示させるもの
    single-hoge.php
  • カスタムアーカイブページを表示させるもの
    archive-hoge.php
  • カスタム投稿のカテゴリー・タグを表示させるもの
    taxonomy-hoge_cat.php・taxonomy-hoge_tag.php など

上記テンプレートファイルが存在しない場合は「single.php」や「archive.php」などの通常のテンプレートファイルが使用されます。

注意

GutenbergとClassic Editor

register_post_type() 内の show_in_rest が「true」のとき、編集エディタはGutenbergになります。
show_in_rest が書かれていない、または値が「false」になっている場合Gutenbergは適用されず、従来のクラシックエディタが表示されます。

また、Gutenbergを有効にしているときは、各タクソノミーでも「show_in_rest」を「true」にしないと投稿画面でカテゴリやタグが表示されないので注意しましょう。

テンプレートファイル名について

テンプレートファイル名は「 -(ハイフン)」でカテゴリー・タグ名と結合されてカスタム表示に対応するというWordPress側の仕様があるので、カテゴリ名・タグ名にはハイフンを極力使わないこと。意図しない結果になる場合があります。