【徹底解説】Custom Post Type UIによるカスタムタクソノミーの作り方

WordPressのカスタム投稿タイプを簡単に作れる「Custom Post Type UI」は便利です。

しかし、入力する項目が分かりにくく、初めて使うと何を設定すれば良いか悩んでしまいます。

この記事では、Custom Post Type UIで「カスタムタクソノミー(カスタム分類)」を作るときに入力する項目について、具体例を出しながら詳細に解説しています。

そもそもカスタム投稿タイプやカスタムタクソノミーが何か分からない人は、先に以下の記事をお読みください。

【簡単に分かる】カスタム投稿タイプとは?メリットや使い方を説明

なお、説明するための例として、「お知らせの種類」というカスタムタクソノミーを作成するケースを考えます。

事前準備

カスタムタクソノミーを作る事前準備として、「Custom Post Type UI」というプラグインのインストールと有効化が必要です。

また、標準で用意されている投稿タイプ以外でカスタムタクソノミーを使う場合は、事前にカスタム投稿タイプを作成する必要があります。

詳しくは以下の記事を参考にしてください。

【徹底解説】Custom Post Type UIによるカスタム投稿タイプの作り方

できるようになること

カスタムタクソノミーを作成すると何ができるようになるのか、まず最初に確認しておきます。

タームの編集ができる

カスタムタクソノミーを作成するとタームの編集ができる

WordPressの管理画面にカスタムタクソノミーのメニューが追加されて、タームの追加、編集、削除ができるようになります。

補足
「お知らせの種類」という分類をWordPressでは「カスタムタクソノミー」と呼び、「プレゼント」や「休み」といった項目を「ターム」と呼んでいます。

タームの割り当てができる

カスタムタクソノミーを作成するとタームの割り当てができる

記事の編集画面において、上のようにカスタムタクソノミーの選択欄が表示されて、記事にタームを割り当てることができます。

カスタムタクソノミーの一覧ページを表示できる

カスタムタクソノミーを作成すると一覧ページを表示できる

テーマによってデザインは変わりますが、カスタムタクソノミーの一覧ページが自動で作成されます。上の例では、「休み」というタームを割り当てた記事の一覧が表示されています。

カスタムタクソノミーのデモサイト

カスタムタクソノミーのデモサイト

WordPressテーマギャラリー」という私が制作したデモサイトでは、サイドバーの検索フォームでWordPressのテーマを探せます。

検索条件の「用途」と「機能・特徴」はカテゴリーとタグを使っていますが、「価格帯」に関しては新たに追加したカスタムタクソノミーを使っています。

カスタムタクソノミーの作り方

ここからは、Custom Post Type UIでカスタムタクソノミーを作る方法を説明します。

「タクソノミーの追加と編集」⇒「新規タクソノミーを追加」からカスタムタクソノミーを作成できます。

カスタムタクソノミーの新規登録

入力項目が多くて大変ですが、慣れてしまえば難しくありません。それぞれの入力項目の説明と、私なりの設定の考え方を記載しています。説明を読んでもよく分からない場合は、赤字で書いた設定の例を参考にしてください。

タクソノミースラッグ

カスタムタクソノミーの名称。

データを取得するときやURLなど、様々な場面で使われる重要な項目です。一度作成すると編集できません。

設定の考え方
短くて分かりやすいアルファベットにしましょう。

(例)category_news

複数形のラベル

カスタムタクソノミーの表示用の名称。

管理画面のメニューなどに使われます。

設定の考え方
短くて分かりやすい日本語にしましょう。

(例)お知らせの種類

単数形のラベル

カスタムタクソノミーの表示用の名称。

設定の考え方
「複数形のラベル」と同じで良いです。

(例)お知らせの種類

利用する投稿タイプ

カスタムタクソノミーを使う投稿タイプ。

ここで選択した投稿タイプのみ、カスタムタクソノミーを利用できるようになります。

設定の考え方
カスタムタクソノミーを使う投稿タイプを全てチェックしてください。

(例)お知らせ

追加ラベル

表示用の各種設定。

設定の考え方
必須ではないので、とりあえず最初は全て初期設定で良いと思います。後で必要になったら修正してください。

一般公開

カスタムタクソノミーを一般公開するか?

Falseを選択するとカスタム投稿タイプを作るときの「タクソノミー」に表示されなくなります。

設定の考え方
私が試したところFalseを選択しても作成済みのカスタムタクソノミーについては使用できるようでした。とりあえずTrueを選択しておけば良いです。

(例)True

Public Queryable(一般公開クエリー可)

カスタムタクソノミーの一覧ページをサイト上に表示するか?

Trueを選択するとカスタムタクソノミーの一覧ページをサイト上に表示できます。Falseを選択すると該当するURLにアクセスしても表示されません。

設定の考え方
基本的にはTrueを選択しましょう。もしもカスタムタクソノミーの一覧ページを表示させたくないときはFalseを選択してください。

(例)True

階層

カスタムタクソノミーに親子関係を持たせるか?

カスタムタクソノミーの親子関係(階層)

Trueを選択して、既に登録されているタームが一つ以上あるときに、上のような親を設定する項目が表示されます。

設定の考え方

親子関係によって記事を表示したり、デザインを変えたりする場合には、Trueを選択してください。

ブロックエディター(Gutenberg)を使っている場合、Trueを選択すると記事の編集画面でカテゴリーと同じようにチェックボックスで選択できるようになります。

(例)True

UIを表示

管理画面にカスタムタクソノミーを表示するか?

WordPress管理画面のカスタムタクソノミーのメニュー

Trueを選択すると管理画面にカスタムタクソノミーのメニューが表示されます。

記事の編集画面におけるカスタムタクソノミーの選択欄

また、記事の編集画面にカスタムタクソノミーの選択欄が表示されます。

Falseを選択するとこれらが表示されないので、タームの編集や記事への割り当てができません。

ただし、Falseを選択しても「Public Queryable」がTrueなら、既に作成したカスタムタクソノミーの一覧ページなどはサイト上に表示されます。

設定の考え方
基本的にはTrueを選択しましょう。

(例)True

メニューに表示する

管理画面のメニューにカスタムタクソノミーを表示するか?

WordPress管理画面のカスタムタクソノミーのメニュー

Trueを選択すると管理画面にカスタムタクソノミーのメニューが表示されます。Falseを選択すると表示されないので、タームの編集はできません。

「メニューに表示する」でFalseを選択したときの管理画面

「UIを表示」との違いは、「メニューに表示する」は管理画面のメニューにしか関係しないところです。「メニューに表示する」でFalseを選択しても上のように記事の編集画面ではタームの割り当てができますが、「UIを表示」でFalseを選択するとそれができません。

設定の考え方
基本的にはTrueを選択しましょう。ただし、複数人でサイトを管理している場合など、タームの編集をさせたくないときは、Falseを選択してメニューから消してしまう方法もあると思います。

(例)True

ナビゲーションメニューに表示

カスタムタクソノミーの一覧ページをナビゲーションメニューに表示するか?

カスタムタクソノミーの一覧ページをナビゲーションメニューに追加

Trueを選択すると上のように管理画面の「外観」⇒「メニュー」⇒「メニュー項目を追加」にカスタムタクソノミーの一覧ページが表示されます。

Falseを選択すると表示されないので、サイトのナビゲーションメニューにカスタムタクソノミーの一覧ページを追加できなくなります。

設定の考え方
基本的にはTrueを選択しましょう。ただし、依頼を受けてサイトを制作する場合に、依頼者が間違ってカスタムタクソノミーの一覧ページをメニューに追加することを防ぎたいときはFalseを選択してください。

(例)True

クエリー変数

クエリー変数を使用するか?

「リライト」でFalseを選択するか、Trueでも「設定」⇒「パーマリンク設定」が「基本」のときに使います。

この条件のとき、通常は以下のようなURLになります。
(例)sample.com/?taxonomy=category_news&term=holiday

クエリー変数でTrueを選択するとURLが以下のように変わります。
(例)sample.com/?category_news=holiday

設定の考え方
URLは短い方が分かりやすいので、Trueを選択するのが良いと思います。

(例)True

カスタムクエリー変数文字列

クエリー変数として使われるスラッグ。

クエリー変数でTrueを選択したときに有効です。

例えば「news_type」を入力すると以下のようなURLになります。
(例)sample.com/?news_type=holiday

空欄の場合は「タクソノミースラッグ」が入って以下のようなURLになります。
(例)sample.com/?category_news=holiday

設定の考え方
好みにもよりますが、わざわざ入力してクエリー変数を変えなくても良いと思います。

(例)空欄

リライト

カスタムタクソノミーの一覧ページのURLを変更するか?

Trueを選択するとパーマリンク設定に関係なく(%post_id%を設定していたとしても)、「(ドメイン名)/(カスタムリライトスラッグ)/(タームのスラッグ)」というURL構造になります。
(例)sample.com/category_news/holiday

Falseを選択するか、Trueを選択してもパーマリンク設定が「基本」のときは、「(ドメイン名)/?(カスタムクエリー変数文字列)=(タームのスラッグ)」というURL構造になります。※「クエリー変数」がTrueのとき
(例)sample.com/?category_news=holiday

設定の考え方
Trueを選択してリライトした方がURLは分かりやすいと思います。

(例)True

カスタムリライトスラッグ

リライトするときのURLのスラッグ。

「リライト」でTrueを選択して、パーマリンク設定が「基本」以外のときに有効です。

入力した文字列がカスタムタクソノミーの一覧ページのスラッグに使われます。例えば、「news_genre」を入力した場合、カスタムタクソノミーの一覧ページのURLは以下のようになります。
(例)sample.com/news_genre/holiday

空欄の場合は「タクソノミースラッグ」が入ります。
(例)sample.com/category_news/holiday

カスタムタクソノミーを一つのカスタム投稿タイプでしか使わない場合、URLにカスタム投稿タイプのスラッグを含めることもできます。例えば、カスタム投稿タイプのスラッグが「news」のときに、カスタムリライトスラッグに「news/category」を入力すると、URLは以下のようになります。
(例)sample.com/news/category/holiday

設定の考え方
好みにもよりますが、個人的には最後に紹介したカスタムリライトスラッグにカスタム投稿タイプのスラッグを入れる形式が分かりやすいと思います。もしくは空欄がおすすめです。

(例)空欄

フロントでのリライト

URL構造の先頭に追加するか?

パーマリンク設定でURL構造の先頭に「blog」や「archives」を付ける

上のようにパーマリンク設定で「/blog/%postname%(カスタム構造)」や「archives/123(数字ベース)」といった設定をしている場合、URL構造の先頭には「blog」や「archives」が入ります。

Trueを選択すると先頭の「blog」や「archives」が追加されて、カスタムタクソノミーの一覧ページのURLは以下のようになります。
(例)sample.com/blog/category_news/holiday

Falseを選択すると先頭には付かずに以下のようなURLになります。
(例)sample.com/category_news/holiday

設定の考え方
Trueを選択するとURL構造に統一感はありますが、Falseを選択した方がURLは短くて分かりやすいです。

(例)True

階層リライト

階層化したURLを許可するか?

「階層」でTrueを選択したときに有効です。

Trueを選択すると親が設定されているタームのURLには親のスラッグが入ります。例えば、親が「holiday」、子が「holiday-child」のとき、以下のようなURLになります。
(例)sample.com/category_news/holiday/holiday-child

Falseを選択すると以下のように親のスラッグが入りません。
(例)sample.com/category_news/holiday-child

設定の考え方
Trueを選択すると親子関係は分かりやすいですが、Falseを選択した方がURLは短いです。

(例)True

管理画面でカラムを表示

記事に割り当てられたタームを管理画面の記事一覧に表示するか?

記事に割り当てられたタームを管理画面の記事一覧に表示

Trueを選択すると管理画面の記事一覧において、割り当てられたタームを表示するカラム(列)が追加されます。タームはリンクになっており、クリックするとそのタームが割り当てられている記事だけが抽出されて一覧に表示されます。

設定の考え方
自分で管理画面のカラムをカスタマイズしていない人は、Trueを選択した方が記事一覧からもタームの情報を見られて便利だと思います。

(例)True

REST API で表示

WP REST APIで外部などから記事の情報を取得するときに、カスタムタクソノミーを表示するか?

設定の考え方
ブロックエディター(Gutenberg)を使っている場合は、Trueを選択しないと記事の編集画面にカスタムタクソノミーが表示されないと思います。

(例)True

REST API ベーススラッグ

(例)空欄

REST API controller class

(例)空欄

クイック編集 / 一括編集パネルに表示

カスタムタクソノミーをクイック編集パネルと一括編集パネルに表示するか?

カスタムタクソノミーを記事一覧のクイック編集パネルに表示

Trueを選択すると、上のように管理画面の記事一覧で「クイック編集」をクリックしたときにカスタムタクソノミーが表示されて、個別記事の編集画面を開かなくても簡単に情報を更新できます。

カスタムタクソノミーを記事一覧の一括編集パネルに表示

また、複数の記事を一括で変更できる「一括編集パネル」にもカスタムタクソノミーが表示されます。ただし、一括編集パネルではタームを新たに割り当てることはできても、既に割り当てられているタームを一括で外すことはできないようでした。

設定の考え方
Trueを選択した方が便利だと思います。

(例)True

Metabox callback

メタボックスのコールバック関数。

標準のカスタムタクソノミーのメタボックス

メタボックスとは、上のように記事の編集画面に表示されてタームの割り当てができる部分です。「Metabox callback」に自作の関数名を入力すると、メタボックスを表示するときにその関数が呼び出されます。それによって表示する内容や登録する内容をカスタマイズできます。

自作のカスタムタクソノミーのメタボックス

標準では、先ほどのように全てのタームが一覧で表示されます。サンプルとして、上のように親のタームだけを選択できるようにカスタマイズするケースを考えます。

まずは、「Metabox callback」に「my_taxonomy_meta_box_callback」を入力して、functions.phpなどに「my_taxonomy_meta_box_callback」という関数名で以下のようなプログラムを書きます。

functions.php
function my_taxonomy_meta_box_callback($post) {
  $taxonomies = 'category_news';
  $args = array(
    'orderby'    => 'name', 
    'order'      => 'ASC',
    'hide_empty' => false, 
    'fields'     => 'all', 
    'parent'     => 0
  ); 
  $terms = get_terms( $taxonomies, $args );
  if( !empty($terms) && !is_wp_error($terms) ) {
    echo '<ul>';
    foreach ( $terms as $term ) {
      echo '<li><input type="checkbox" name="tax_input[' . $taxonomies . '][]" value="' . $term->term_id . '">' . $term->name . '</li>';
    }
    echo '</ul>';
    echo '※親の項目のみ表示されています。';
  }
}
※イメージのためのサンプルプログラムです。実際に動くためにはデータベースへの更新など他にも処理が必要です。

get_termsという関数でタームの一覧を取得するときに、「parent」が「0(親)」という抽出条件を引数で渡しています。

設定の考え方
基本的には空欄にしましょう。WordPressやプログラミングの知識がないとカスタマイズは難しいです。

(例)空欄

まとめ

今回の記事では、Custom Post Type UIを使ってカスタムタクソノミーを作る方法を説明してきました。

カスタム投稿タイプとカスタムタクソノミーの作り方を理解すれば、これまでよりも高機能なサイトを作れるようになるはずです。項目が多くて最初は大変だと思いますが、少しずつ慣れていってください。

今回の記事の続きとして、さらに発展的な内容は以下の記事をお読みください。

【徹底解説】カスタム投稿タイプのカスタマイズ方法

なお、テーマによっては今回説明した通りにはならない可能性があります。正確性については保証できませんので、ご自身の責任で参考にしてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA