WordPress カスタム投稿タイプの作成テンプレート 効率厨向け

カスタム投稿タイプやタクソノミーを作成するのに、実はプラグインを使うより自分で書いた方が楽だということに気づいたので。

プラグインを使ってカスタム投稿タイプやタクソノミーを作ろうとすると、各種ラベルがう○こになったりする。かと言って、複数のカスタムタクソノミーのすべてのラベルを設定するとか面倒すぎるし一貫性が無くなったりする。というわけで自作する。

カスタム投稿タイプの作成

名前とラベルの配列は変数にしておくことで、自分のデフォルトのラベルセットを作成できる。

<?php
// 詳しくは https://wpdocs.osdn.jp/関数リファレンス/register_post_type
// menu_iconは https://developer.wordpress.org/resource/dashicons/ の名前または 画像のURL
add_action('init', 'custom_post_types');

function custom_post_types()
{
  $slug = 'products';
  $name = '商品';
  $args = [
    'labels' => [
      'name'               => $name,
      'singular_name'      => $name,
      'menu_name'          => $name,
      'name_admin_bar'     => $name,
      'all_items'          => $name . '一覧',
      'add_new'            => '新規追加',
      'add_new_item'       => '新規' . $name . 'を追加',
      'edit_item'          => $name . 'の編集',
      'new_item'           => '新規' . $name,
      'view_item'          => $name . 'を表示',
      'search_items'       => $name . 'を検索',
      'not_found'          => $name . 'が見つかりませんでした',
      'not_found_in_trash' => 'ゴミ箱内に' . $name . 'が見つかりませんでした。',
      'parent_item_colon'  => '親ページ: '
    ],
    'description'         => '',
    'public'              => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'show_ui'             => true,
    'show_in_nav_menus'   => true,
    'show_in_menu'        => true,
    'show_in_admin_bar'   => true,
    'show_in_rest'        => true,
    'menu_position'       => 20,
    'menu_icon'           => 'dashicons-admin-post', //https://developer.wordpress.org/resource/dashicons/
    'hierarchical'        => false,
    'taxonomies'          => ['genre'], // タクソノミーを配列で関連付け
    'has_archive'         => true,
    'supports'            => [
      'title',
      'editor',
      'author',
      'thumbnail',
      'excerpt',
      'trackbacks',
      'custom-fields',
      'comments',
      'revisions',
      'page-attributes',
      'post-formats'
    ]
  ];

  register_post_type($slug, $args);
}

カスタムタクソノミーの作成

ラベルについては同上。

<?php
// カスタムタクソノミーの作成
// 詳しくは http://wpdocs.osdn.jp/関数リファレンス/register_taxonomy

add_action('init', 'custom_taxonomies', 0);

function custom_taxonomies() {
  $slug = 'test';
  $object_type = ['install']; // 対応させる投稿タイプ
  $name = 'テストタクソノミー';
  $labels = [
    'name'                       => $name,
    'singular_name'              => $name,
    'menu_name'                  => $name,
    'all_items'                  => 'すべての項目',
    'edit_item'                  => $name . 'の編集',
    'view_item'                  => $name . 'を表示',
    'update_item'                => $name . 'を更新',
    'add_new_item'               => '新規' . $name . 'を追加',
    'edit_item'                  => $name . 'の編集',
    'new_item_name'              => '新規' . $name . '名',
    'parent_item'                => '親の' . $name,
    'parent_item_colon'          => '親の' . $name . ': ',
    'search_items'               => $name . 'を検索',
    'popular_items'              => '人気の' . $name,
    'separate_items_with_commas' => '項目をカンマで区切ってください',
    'add_or_remove_items'        => $name . 'の追加または削除',
    'choose_from_most_used'      => 'よく使われている項目から選択',
    'not_found'                  => $name . 'が見つかりませんでした'
  ];
  $args = [
    'labels'                => $labels,
    'public'                => true,
    'show_ui'               => true,
    'show_in_navs_menus'    => true,
    'show_tagcloud'         => true,
    'show_in_quick_edit'    => true,
    'meta_box_cb'           => null,
    'show_admin_column'     => true,
    'description'           => '',
    'hierarchical'          => true,
    'update_count_callback' => '',
    'query_var'             => $slug,
    'rewrite'               => true,
    'sort'                  => true
  ];
  register_taxonomy($slug, $object_type, $args);
}

ラベルセットはメソッドにしておいてもいい

親テーマとかならこんな感じで。

<?php
function custom_post_type_labels($name) {
    $labels = [
      'name'               => $name,
      'singular_name'      => $name,
      'menu_name'          => $name,
      'name_admin_bar'     => $name,
      'all_items'          => $name . '一覧',
      'add_new'            => '新規追加',
      'add_new_item'       => '新規' . $name . 'を追加',
      'edit_item'          => $name . 'の編集',
      'new_item'           => '新規' . $name,
      'view_item'          => $name . 'を表示',
      'search_items'       => $name . 'を検索',
      'not_found'          => $name . 'が見つかりませんでした',
      'not_found_in_trash' => 'ゴミ箱内に' . $name . 'が見つかりませんでした。',
      'parent_item_colon'  => '親ページ: '
    ];
    return $labels;
}

// 使うとき
function custom_post_types() {
  // 略
  $name = '商品';
  $args = [
    'labels' => custom_post_type_labels($name),
    // 以下略
  ];
}