この記事の概要
この記事でできること
- カスタム投稿タイプの追加
- カスタム投稿タイプへのカスタムタクソノミー(カテゴリー、category)の追加
- カスタム投稿タイプへのカスタムタクソノミー(タグ、post_tag)の追加
この記事で利用するもの
- functions.php
※別の方法として、WordPressのプラグイン「Custom Post Type UI」を使った方法もあります。functions.phpへ書き込むことなくカスタム投稿を作成することが可能ですが、こちらの方法は割愛します。
カスタム投稿を追加する方法のコード全体像
まずは、今回ご紹介するコードの全体像です。
下記の追加処理を実行しています。
- 新たなカスタム投稿タイプを追加
- 「カテゴリー」として新たなカスタムタクソノミーを追加
- 「タグ」として新たなカスタムタクソノミーを追加
カスタム投稿についてある程度ご存知の方は、下記コードをコピペするだけでカスタム投稿の追加・カスタマイズができると思います。
/* ---------- カスタム投稿タイプを追加 ---------- */
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type(
'news',
array(
'label' => 'ニュース',
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'menu_position' => 5,
'supports' => array(
'title',
'editor',
'thumbnail',
'revisions',
),
)
);
register_taxonomy(
'news-cat',
'news',
array(
'label' => 'カテゴリー',
'hierarchical' => true,
'public' => true,
'show_in_rest' => true,
)
);
register_taxonomy(
'news-tag',
'news',
array(
'label' => 'タグ',
'hierarchical' => false,
'public' => true,
'show_in_rest' => true,
'update_count_callback' => '_update_post_term_count',
)
);
}
上記コードの記述によって、下記画像のように投稿の下に「ニュース」という項目が新たに追加されます。
また、ニュース内のサブメニューにも「ニュースカテゴリー」や「ニュースタグ」といった項目も追加されます。
以下、詳しく解説していきます!
カスタム投稿タイプの基礎知識
コードの詳しい解説の前に、カスタム投稿の基礎知識から。
カスタム投稿(カスタム投稿タイプ)とは
「カスタム投稿」とは、自らで新たに作成することができる「投稿」のことを指します。
機能としては、WordPressのデフォルト機能としてある「投稿」と同じです。この投稿は1つしか作成できませんが、カスタム投稿タイプはいくつでも作成が可能です。
例えば、「”ブログ”としてWordPressの”投稿”を利用して更新をしている」といった場合。
新たに”カスタム投稿”を作成することによって、ブログの”投稿”とは別のジャンル(ニュースやサービスの紹介など)として分けて投稿することが可能になります。
項目 | 利用する投稿 |
---|---|
ブログの記事を書く項目 | 投稿(WordPressのデフォルト機能) |
ニュースを書く項目 | カスタム投稿(新たに作成) |
サービスを書く項目 | カスタム投稿(新たに作成) |
ちなみに、「カスタム投稿タイプ」ということもありますが、単純に「カスタム投稿」という場合が多く、検索する時も「WordPress カスタム投稿」で検索可能です。
カスタムタクソノミーとは
「カスタムタクソノミー」とは、自分で新たに作成した分類のことです。
そもそも「タクソノミー」とは、「カテゴリー」や「タグ」などと、ひとつの記事をより詳細に分類したものです(「カスタム分類」と言うこともあります)。
「タクソノミー」を直訳すると「分類」という意味で、「カテゴリー」も「タグ」も「タクソノミー」になります。
今回扱うタクソノミーはカスタム投稿内でのタクソノミーのため、「タクソノミー」ではなく「カスタムタクソノミー」と呼びます。
「カテゴリー」と「タグ」の違い
簡単に言うと、階層があるかどうかの違いです。
カテゴリーには階層(親子関係)が存在しますが、タグには階層(親子関係)が存在しません。
「カテゴリー」は、記事をざっくりと分類したものというイメージ。
「タグ」は、「カテゴリー」をより詳しく分類したものというイメージです。
「カスタム投稿 > カテゴリー > タグ」といった感じですね。
例えば、「音楽」のジャンルの中でも「洋楽」なのか「邦楽」なのかをカテゴリーとして分類。さらに、「洋楽」の中でも「ロック」や「ポップ」などと、より深くタグとして分類するようなものです。
【解説1】カスタム投稿を新たに追加する方法
まずは、カスタム投稿(カスタム投稿タイプ)を新たに追加してみましょう。
下記コードをコピーしfunctions.phpに貼り付けることで、「ニュース」という新たなカスタム投稿が作成されます。
/* ---------- カスタム投稿の追加 ---------- */
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( // カスタム投稿タイプの追加関数
'news', //カスタム投稿タイプ名(半角英数字の小文字)
array( //オプション(以下)
'label' => 'ニュース', // 管理画面上の表示(日本語でもOK)
'public' => true, // 管理画面に表示するかどうかの指定
'has_archive' => true, // 投稿した記事の一覧ページを作成する
'menu_position' => 5, // 管理画面メニューの表示位置(投稿の下に追加)
'show_in_rest' => true, // Gutenbergの有効化
'supports' => array( // サポートする機能(以下)
'title', // タイトル
'editor', // エディター
'thumbnail', // アイキャッチ画像
'revisions' // リビジョンの保存
),
)
);
}
カスタム投稿タイプのページが表示されない場合
[設定] 〉[パーマリンク設定]にて、何も変更しないでそのまま「変更を保存」をクリックしてください。
これによって、WordPress側がリフレッシュされ表示される場合があります。
なおこれは、この後カスタム投稿タイプ関連の構築を行う度に行うようにしましょう。
カスタム投稿タイプの追加をする処理の呼び出し
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( // カスタム投稿タイプの追加関数
'news', // カスタム投稿タイプ名
)
}
上記で、新たにカスタム投稿を追加する処理ということになります。
実はこのコードのみでカスタム投稿は作成されています。が、使い物にならない状態です。
以降、詳しく分解して見ていきます。
処理の呼び出し
add_action( 'init', 'create_post_type' );
function create_post_type() {
// 処理内容
}
function create_post_type() { } の { } 内の処理を呼び出しています。
1行目にあるcreate_post_type
と、2行目にあるcreate_post_type
が同じ文字列であれば、「// 処理内容」の処理を呼び出せます。
※どんな名前でも問題ないですが、この記事では一般的に付ける名前で紹介します。
カスタム投稿タイプの追加
register_post_type(
'news',
)
カスタム投稿タイプの追加をしています。
このコードの場合、「news」というカスタム投稿名で追加されます。
register_post_type
は、カスタム投稿タイプを追加するためのWordPressで用意されている関数です。
なお、「news」などの文字は下記のように、記事のURLにもなります。
カスタム投稿記事のURL
https://ドメイン名/news/
使える文字は、「小文字のアルファベット」、もしくは、「記号」のみです。
「スペース」は使えません。単語の区切りにはハイフン(-)を使ってください。
注意点として、投稿をいくつかしたあとの変更はできるだけ避けましょう。URLが変更されてしまいます。
オプション(パラメータ)の指定
カスタム投稿をより詳細にカスタマイズします。
これでやっと、カスタム投稿として実際に使えるようになってきます。
下記のような記述が基本です。array()
の中に、利用したいオプション名の指定します。
array(
'label' => 'ニュース',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'show_in_rest' => true,
'supports' => array(
'title',
'editor',
'thumbnail',
'revisions'
),
)
各オプション(パラメータ)の詳しい解説
- label
管理画面上で表示されるカスタム投稿タイプの名前の設定。
日本語でOKです。わかりやすい単語で設定してください。 - public
このカスタム投稿タイプを管理画面上に表示するかどうかの設定。
初期値は”false”となっており、管理画面のメニュー表示が非表示となり投稿ができなくなるので、”true”にします。 - has_archive
カスタム投稿タイプのアーカイブページ(一覧ページ)を作成したい場合の設定。
カスタム投稿は、デフォルトでは固定ページと同じで一覧表示はされません。これを一覧表示させるためには、アーカイブを有効にする必要があります。
なお、パーマリンク設定がデフォルトの場合は、この設定をせずともアーカイブページを表示できますが、あらかじめ記述しておいて問題ないです。 - menu_position
管理画面左にあるメニューのどの位置に表示するかどうかの設定。
「5」と指定すると「投稿」の下に表示されます。「メディア」の下に置きたい場合は「10」、「固定ページ」の下に置きたい場合は「20」、「投稿」の上に置きたい場合は「4」に設定してください。 - show_in_rest
デフォルトはfalseです。「REST APIの有効化」などと言われる事が多いですが、ブロックエディタ(Gutenberg)で使用できるようにするための設定です。
なお、そもそもエディタの有効化(‘supports’ => ‘editor’)している必要があります。エディタが無効化されていると true が記述されていてもGutenbergが表示されないので注意! - supports
編集画面で使用できる項目の設定。
使用しない項目や、表示したくない項目は記述しなくてOKです。- title
投稿にてタイトルを使うかどうかの設定。 - editor
投稿にてエディタを使うかどうかの設定。 - thumbnail
投稿にてアイキャッチ画像を使うかどうかの設定。
別途、「thumbnail(アイキャッチ画像)の有効化が」されている必要があります。
functions.phpにadd_theme_support('post-thumbnails');
を記述することで有効化されます。このコードの追加場所は、今回ご紹介しているコードの外であればどこでも大丈夫です。 - revisions
リビジョンの保存の設定。
投稿に加えられた変更を自動的に保存する機能で、バックアップの役割を果たします。
ただし、データの肥大化によるサイトの速度低下も懸念されるため、リビジョン数を制限する、もしくは定期的に削除するなどの管理が必要です。
なお、2回以上記事を保存・更新した後から表示されます。 - author
作成者の設定。 - excerpt
抜粋の設定。
- custom-fields
カスタムフィールドの設定。 - comments
コメントの他、編集画面にコメント数のバルーンを表示する設定。 - page-attributes
メニュー順序の設定。「親〜」オプションを表示するために hierarchical が true であることが必要です。 - post-formats
投稿のフォーマットを追加の設定。
- title
他にもたくさんのオプション(パラメータ)が存在します。
より詳しく知りたい方は、下記のWordPress Codex 日本語版にて!
複数のカスタム投稿タイプを新たに追加したい場合
「ニュース」や「サービス紹介」などと、複数のカスタム投稿タイプを追加したい場合は、下記のように記述します。
※「サポートする機能」など、一部省略しています。
/* ---------- カスタム投稿タイプを追加 ---------- */
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type(
'news', //カスタム投稿タイプ名
array( //オプション
'label' => 'ニュース',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'show_in_rest' => true,
'supports' => array(
// サポートする機能を記述
),
)
);
register_post_type(
'service', //カスタム投稿タイプ名
array( //オプション
'label' => 'サービス紹介',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'show_in_rest' => true,
'supports' => array(
// サポートする機能を記述
),
)
);
}
【解説2】カテゴリーとしてカスタムタクソノミーを新たに追加する方法
下記コードを「functions.php」に追記します。
/* ---------- カスタムタクソノミー(カテゴリー)の追加 ---------- */
add_action('init', 'custom_taxonomy_cat');
function custom_taxonomy_cat(){
register_taxonomy( // カスタムタクソノミーの追加関数
'news-cat', // カテゴリーの名前(半角英数字の小文字)
'news', // カテゴリーを追加したいカスタム投稿タイプ名
array( // オプション(以下
'label' => 'ニュースカテゴリー', // 表示名称
'public' => true, // 管理画面に表示するかどうかの指定
'hierarchical' => true, // 階層を持たせるかどうか
'show_in_rest' => true, // REST APIの有効化。ブロックエディタの有効化。
)
);
}
以降、詳しく見ていきます。
カテゴリー用のカスタムタクソノミーを追加する処理の呼び出し
下記によって、function custom_taxonomy_cat()内の内容を呼び出しています。
add_action('init', 'custom_taxonomy_cat');
function custom_taxonomy_cat(){
// 処理内容
}
下記によって、カスタムタクソノミーの登録をしています。
register_taxonomy( // カスタムタクソノミーの追加関数
'news-cat', // カテゴリーの名前(英字)
'news', // カテゴリーを追加したいカスタム投稿タイプ名
)
1行目にあるregister_taxonomy
は、「カスタムタクソノミー」を追加するためのWordPressで用意されている関数です。
今回の場合、「news-cat」というカテゴリー名(2行目)で、「news」として作成したカスタム投稿タイプに追加(3行目)しています。
なお、使える文字は、小文字のアルファベットと記号のみです。
単語の区切りにはハイフン( – )、もしくはアンダーバー( _ )を使ってください。スペースは使えません。
カテゴリー用のオプション(パラメータ)の指定
下記の記述で、カテゴリーのオプション(パラメータ)を指定できます。
array(
'label' => 'ニュースのカテゴリー', // 表示名
'public' => true, // 管理画面に表示するかどうかの指定
'hierarchical' => true, // 階層を持たせるかどうか
'show_in_rest' => true, // REST APIの有効化。ブロックエディタの有効化。
)
各オプション(パラメータ)の詳しい解説
- label
管理画面上で表示されるカテゴリー名の設定。
日本語でOKです。管理上、わかりやすい単語で設定してください。 - public
このカテゴリーを管理画面上に表示するかどうかの設定。
初期値は”false”となっており、管理画面のメニュー表示が非表示となり投稿ができなくなるので、”true”にします。 - hierarchical
デフォルトはfalse。階層構造を持つかどうかの設定です。
“true”だと「カテゴリー」のように。”false”だと「タグ」のような振る舞いになります。 - show_in_rest
デフォルトはfalseです。投稿タイプをブロックエディタ(Gutenberg)で使用できるようにするための設定です。register_post_type内に記述していても、ここの中でもshow_in_restにtrueを指定してあげます。
なお、エディタの有効化(‘supports’ => ‘editor’)している必要があります。
他にもたくさんのオプション(パラメータ)が存在します。
より詳しく知りたい方は、下記のWordPress Codex 日本語版にて!
複数のカスタムタクソノミー(カテゴリー)を追加したい場合
複数のカスタムタクソノミー(カテゴリー)を追加したい場合、下記の様に記述します。
なお、カスタムタクソノミー(カテゴリー)は、元となる「カスタム投稿タイプ」の追加登録があってこそ追加ができるものです。実用性も兼ねて、カスタム投稿タイプの追加も兼ね合わせたコードになります。
/* ---------- カスタム投稿タイプを追加 ---------- */
add_action( 'init', 'create_post_type' );
function create_post_type() {
// 「ニュース」のカスタム投稿追加
register_post_type(
'news', //カスタム投稿タイプ名
array(
'label' => 'ニュース',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'show_in_rest' => true,
'supports' => array(
// サポートする機能を記述
),
)
);
// 「ニュース」のカスタム投稿にカテゴリーを追加
register_taxonomy(
'news-cat',
'news', // カテゴリーを追加したいカスタム投稿タイプ名
array(
'label' => 'カテゴリー',
'hierarchical' => true,
'public' => true,
'show_in_rest' => true,
)
);
// 「サービス」のカスタム投稿追加
register_post_type(
'service', //カスタム投稿タイプ名
array(
'label' => 'サービス',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'show_in_rest' => true,
'supports' => array(
// サポートする機能を記述
),
)
);
// 「サービス」のカスタム投稿にカテゴリーを追加
register_taxonomy(
'service-cat',
'service', // カテゴリーを追加したいカスタム投稿タイプ名
array(
'label' => 'カテゴリー',
'hierarchical' => true,
'public' => true,
'show_in_rest' => true,
)
);
}
【解説3】タグとしてカスタムタクソノミーを新たに追加する方法
タグとしてカスタムタクソノミーを追加したい場合、下記のコードを「functions.php」に追記します。
/* ---------- カスタムタクソノミー(タグ)の追加 ---------- */
add_action('init', 'custom_taxonomy_tag');
function custom_taxonomy_tag(){
register_taxonomy(
'news-tag', // タグの名前(半角英数字の小文字)
'news', // タグを追加したいカスタム投稿タイプ
array( // オプション(以下)
'label' => 'タグ', // 表示名
'public' => true, // このタクソノミーを利用する場合かどうか
'hierarchical' => false, // 階層を持たせるかどうか
'show_in_rest' => true, // REST APIの有効化。ブロックエディタの有効化。
'update_count_callback' => '_update_post_term_count',
)
);
}
タグ用のカスタムタクソノミーを追加する処理の呼び出し
下記によって、function custom_taxonomy_tag()内の内容を呼び出しています。
add_action('init', 'custom_taxonomy_tag');
function custom_taxonomy_tag(){
// 処理内容
}
下記によって、カスタムタクソノミーの登録をしています。
register_taxonomy(
'news-tag',
'news',
)
1行目のregister_taxonomy
は、「カスタムタクソノミー」を追加するためのWordPressで用意されている関数です。
今回の場合、「news-tag」というタグ名(2行目)で、newsのカスタム投稿タイプに追加(3行目)しています。
なお、使える文字は、小文字のアルファベットと記号のみです。
単語の区切りにはハイフン( – )、もしくはアンダーバー( _ )を使ってください。スペースは使えません。
タグ用のオプション(パラメータ)の指定
下記で、タグのオプションを指定できます。
array(
'label' => 'ニュースタグ',
'hierarchical' => false,
'public' => true,
'show_in_rest' => true,
'update_count_callback' => '_update_post_term_count',
)
各オプション(パラメータ)の詳しい解説
※カテゴリーの部分で解説しているオプションは省いています。
- hierarchical
階層構造を持つかどうかの設定。
trueだと「カテゴリー」のように、falseだと「タグ」のような振る舞いになります。 - update_count_callback
カスタムタクソノミーをタグのように使いたい場合は、オプションの'update_count_callback' => '_update_post_term_count'
を必ず追加します。
こちら、関数リファレンス/register taxonomy – WordPress Codex 日本語版 (osdn.jp)にて詳しく記載されていますが、「記述しない場合は非常に面倒なことになります」の文言もあり、通常は記載しておきます。
複数のカスタムタクソノミー(タグ)を追加したい場合
複数のカスタムタクソノミー(タグ)を追加したい場合、下記の様に記述します。
なお、カスタムタクソノミー(タグ)は、カスタムタクソノミー(カテゴリー)と同様に、元となる「カスタム投稿タイプ」の追加登録があってこそ追加ができるものです。
実用性も兼ねて、カスタム投稿タイプの追加とカスタムタクソノミー(カテゴリー)の追加も兼ね合わせたコードになります。
/* ---------- カスタム投稿タイプを追加 ---------- */
add_action( 'init', 'create_post_type' );
function create_post_type() {
// 「ニュース」のカスタム投稿追加
register_post_type(
'news', //カスタム投稿タイプ名
array(
'label' => 'ニュース',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'show_in_rest' => true,
'supports' => array(
// サポートする機能を記述
),
)
);
// 「ニュース」のカスタム投稿にカテゴリーを追加
register_taxonomy(
'news-cat',
'news', // カテゴリーを追加したいカスタム投稿タイプ名
array(
'label' => 'ニュースカテゴリー',
'hierarchical' => true,
'public' => true,
'show_in_rest' => true,
)
);
// 「ニュース」のカスタム投稿にタグを追加
register_taxonomy(
'news-tag',
'news', // タグを追加したいカスタム投稿タイプ名
array(
'label' => 'ニュースタグ',
'public' => true,
'hierarchical' => false,
'show_in_rest' => true,
)
);
// 「サービス」のカスタム投稿追加
register_post_type(
'service', //カスタム投稿タイプ名
array(
'label' => 'サービス',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'show_in_rest' => true,
'supports' => array(
// サポートする機能を記述
),
)
);
// 「サービス」のカスタム投稿にカテゴリーを追加
register_taxonomy(
'service-cat',
'service', // カテゴリーを追加したいカスタム投稿タイプ名
array(
'label' => 'サービスカテゴリー',
'public' => true,
'hierarchical' => true,
'show_in_rest' => true,
)
);
// 「サービス」のカスタム投稿にタグを追加
register_taxonomy(
'service-tag',
'service', // タグを追加したいカスタム投稿タイプ名
array(
'label' => 'サービスタグ',
'public' => true,
'hierarchical' => false,
'show_in_rest' => true,
)
);
}
カスタム投稿タイプの追加における注意点
使ってはいけない文字・単語が存在する(予約後)
WordPressには、「すでにWordPress内で使われてる文字」や「予約語として登録されている単語」というものが存在しています。
これらの文字列(単語)を使うと、
- 投稿が正常に表示されない
- 404エラーが返される
- タクソノミーアーカイブが西方に表示されない
などなど、予期せぬバグの原因にもなるので、同じものは使用しないようにしましょう。
「Ctrl」+「F」キーでこのページ内に検索をかけ、該当する名前がないかを確認してみてください。
NG単語(予約語)一覧
※アルファベット順
※参考 : 関数リファレンス/register taxonomy – WordPress Codex 日本語版 (osdn.jp)
- action
- attachment (添付ファイル)
- attachment_id
- author (著者)
- author_name
- calendar
- cat (今回ご紹介してるコードのように「xxx-cat」などであれば問題ないです)
- category
- category__and
- category__in
- category__not_in
- category_name
- comments_per_page
- comments_popup
- custom
- customize_messenger_channel
- customized
- cpage
- day
- debug
- embed
- error
- exact
- feed
- hour
- link_category
- m
- minute
- monthnum
- more
- name
- nav_menu (ナビゲーションメニュー)
- nav_menu_item
- nonce
- nopaging
- offset
- order
- orderby
- p
- page (固定ページ)
- page_id
- paged
- pagename
- pb
- perm
- post (投稿)
- post__in
- post__not_in
- post_format
- post_mime_type
- post_status
- post_tag
- post_type
- posts
- posts_per_archive_page
- posts_per_page
- preview
- robots
- revision (リビジョン)
- s
- search
- second
- sentence
- showposts
- static
- subpost
- subpost_id
- tag
- tag__and
- tag__in
- tag__not_in
- tag_id
- tag_slug__and
- tag_slug__in
- taxonomy
- tb
- term
- terms
- theme
- title
- type
- w
- withcomments
- withoutcomments
- year
まとめと次に見たい記事
WordPressにおけるカスタム投稿タイプの追加やその利用方法をマスターすることで、WordPress構築の幅がぐんと伸びます。
ぜひどんどん活用して、使いやすいWordPress運用をしてみてください!
なお、カスタム投稿の作成ができたあとは「フロントに表示させる」必要があります。
よろしければ下記の記事を参考にしてみてください!
投稿の内容を投稿以外のページで表示する
「投稿」や「カスタム投稿」で作成した記事をいろんなページで表示させる方法については下記で解説しています。
WP_Query
を使ったサブループの方法です。
カスタム投稿のカテゴリーごとに記事を取得して表示する
カスタム投稿で自作したタクソノミー(カスタムタクソノミー)内から条件にあった記事だけ取得する方法については下記で解説しています。
より詳しい取得&表示をする場合、「投稿」と「カスタム投稿」では記述方法が異なりますので、参考にしてみてください!