カスタム投稿にカテゴリーとタグを登録する

カスタム投稿にカテゴリーとタグを登録したい場合register_taxonomy()関数を使用します。使用方法は特に難しくなくテンプレート化されているので簡単に実装できます。もしプラグイン等で実装したい場合Custom Post Type UI辺りが有名かと思うのでそちらを使うと良いでしょう。

カスタム投稿の場合カテゴリー/タグといった呼び方でも間違いではないですが、カスタム投稿の場合これらの総称をカスタム分類と呼んでいます(別名:カスタムタクソノミー)。

カスタム分類の必要性

もうすでにカスタム投稿を実装している人にとっては分かりきったことですがregister_post_type()だけではデフォルトの投稿機能のようにカテゴリーやタグといった機能は実装されません。投稿一覧と新規追加だけの機能しか備わっていません。そこでregister_taxonomy()を追加することでカテゴリーやタグの登録ができるようになります。

別にカスタム分類はなくても投稿機能としては問題ないのですが、ユーザーからしたらそのドメインにどのような情報があるのか階層化されてないと探すのが手間です。カスタム投稿タイプの規模にもよりますが、管理者にとってもユーザーにとっても情報が整理されている方が何かを探すときに見つけやすいかと思うので、カスタム分類の登録はしておくと良いでしょう。

register_taxonomy() – 使用例

カスタム投稿の場合カテゴリーでもタグでもregister_taxonomy()を使用します。カテゴリー/タグ両方を登録する場合はregister_taxonomy()を2つ登録する必要があります。

functions.php

下記のコードをfunctions.phpに記述します。すでにregister_post_type()の登録はしていると思うので無視して大丈夫です。

function custom_post_type() {
	// カスタム投稿の登録
	register_post_type(
		'custom-post',
		[
			'labels' => [
				'name' => 'カスタム投稿',
				'singular_name' => 'custom-post',
			],
			'rewrite' => [
				'slug' => 'custom-post'
			],
			'public' => true,
			'has_archive' => true,
			'show_in_rest' => true,
		]
    );

	// カテゴリー登録
	register_taxonomy(
		'custom-category',
		'custom-post',
		[
			'show_in_rest' => true,
			'show_admin_column' => true,
			'hierarchical' => true,
		]
	);

	// タグ登録
	register_taxonomy(
		'custom-tags',
		'custom-post',
		[
			'show_in_rest' => true,
			'show_admin_column' => true,
			'hierarchical' => false,
		]
	);
}
add_action('init', 'custom_post_type');

register_taxonomy()について

まずregister_taxonomy()に着目しましょう。

カスタム分類のパラメーター設定はregister_taxonomy($taxonomy, $object_type, $args);となっています。データベースからカスタム分類情報を取得する際に使うキーとなっているので、できれば一度登録したら改名せず使い続けてください。

$taxonomyはカスタムタクソノミー名を埋めます。32文字以内で小文字の英数字/ダッシュ/アンダースコアのみ使用可能です。

$object_typeはカスタム分類と紐付ける投稿タイプを指定します。今回はカスタム投稿と紐付けるのでここで記されているカスタム投稿名は'custom-post'なのでセットします。

$argsに関してはカスタム分類の細かな設定が可能になります。配列で、引数と値を入力することで細かな設定ができます。ここでは重要な部分だけ紹介します。

// カテゴリー登録
register_taxonomy(
	'custom-category',
	'custom-post',
	[
		'show_in_rest' => true,
		'show_admin_column' => true,
		'hierarchical' => true,
	]
);

カスタムタクソノミーページ用のテンプレートファイル

最後に、カスタム分類用のテンプレートファイルを紹介して終了したいと思います。上記でカテゴリーとタグの登録をしましたがカスタムタクソノミーの場合テンプレートファイルが異なり、カテゴリー/タグともにtaxonomy.phpがテンプレートファイルになります。

以下カスタムタクソノミーの優先順位になります。

  1. taxonomy-{taxonomy}-{term}.php
  2. taxonomy-{taxonomy}.php
  3. taxonomy.php
  4. archive.php
  5. index.php

今回の場合カテゴリーとタグ両方登録しました。カテゴリー/タグ用テンプレートファイルを分けたい場合以下のようにテンプレートファイルを作成します。

参考文献