WordPressのカスタムタクソノミーを使ってカスタム投稿タイプにカテゴリーを設定する方法について学んだので備忘録としてまとめます。
カスタムタクソノミーとは?
taxonomyは「分類法」を意味し、WordPressのカスタムタクソノミーは、カスタム投稿タイプに対して独自の分類体系を構築できる機能です。カスタム投稿専用のカテゴリー・タグと言った方がわかりやすいかもしれません。
カスタム投稿タイプとの関係性がわかりづらいかもしれませんが、下記のようにコンテンツの種類ごとに分類したページをさらに細分化したい時に利用します。
種 類 | 内 容 | タクソノミー | ターム |
---|---|---|---|
投稿ページ | お知らせ、ブログなど日付順に並べたいコンテンツ | カテゴリー | 「当店からのお知らせ」「スタッフブログ」「セール情報」など |
タグ | 「休業日」「新発売」「期間限定」など | ||
固定ページ | HOME、会社概要、お問い合わせなど日付が関係しないコンテンツ | --- | --- |
--- | --- | ||
カスタム投稿ページ | 商品紹介、事例紹介、スタッフ紹介など上記以外で分類したいコンテンツ | 商品カテゴリーなど | 「野菜」「くだもの」「調味料」など |
商品タグなど | 「お買い得」「新商品」「店長のおすすめ」など |
カテゴリーやタグとして追加していく項目のことを「ターム(term)」と呼びます。
WPの固定ページにはカテゴリーやタグを設定する機能はありません。
WPのカスタム投稿タイプの使い方についてはこちらのページにまとめています。
カスタムタクソノミーの追加と登録の方法
テーマフォルダ内にあるfuncitons.phpに、register_taxonomy関数を使ってカスタムタクソノミーを追加します。
今回は例として、「商品カテゴリー」というカスタムタクソノミーを追加してみます。
追加したいタクソノミーがカテゴリーでもタグでも、register_taxonomy関数内で表示名を任意に設定するだけなので書き方は同じです。
functions.phpをはじめとしたテーマファイルの編集はサイトに予期せぬ不具合をもたらす恐れがあります。必ず事前にバックアップをとり、自己責任で編集してください。
functions.php
add_action('init','my_custom_taxonomy_cate'); function my_custom_taxonomy_cate(){ register_taxonomy( 'items-cate',//タクソノミーの識別名(スラッグ) 'items',//追加先のカスタム投稿タイプ array(//オプション 'label' => '商品カテゴリー',//表示名称 'public' => true,//管理画面へ表示する 'hierarchical' => true,//階層化を有効にする 'show_in_rest' => true,//REST API・ブロックエディタを有効にする。 ), ); }
4行目タクソノミーの識別名(スラッグ)を定義します。このスラッグはデータの取得など様々な場面で使用します。
スラッグを設定する際はWordPressの予約語を使わないように注意してください。予約語について詳しくはこちらのページにまとめています。
5行目このタクソノミーをどのカスタム投稿タイプに追加するかを指定します。
7行目WP管理画面におけるタクソノミーの表示名をここで設定します。
これでWP管理画面のカスタム投稿タイプメニューの中にカスタムタクソノミー(ここでは「商品カテゴリー」)が追加されます。
クリックして開くと、タームの追加・編集を行うことができます(投稿ページのカテゴリーと同じ)。
追加したタームは、カスタム投稿ページの編集画面で選択できるようになります。
カスタム投稿内でそのページが属するタームを取得する
現在のカスタム投稿ページに設定されているタームを取得するには「get_the_terms関数」を使います。
single-***.php
$myCates = get_the_terms($post->ID,'items-cate'); foreach($myCates as $myCate){ $myCateName = $myCate->name; $myCateUrl = get_term_link($myCate->slug,'items-cate'); echo "<a href='" . $myCateUrl . "'>" . $myCateName . "</a>"; }
1行目get_the_termsは第一引数にページID、第二引数にはカスタム投稿タイプ名を指定します。現在のページに設定されているタームが全て取得されます。
2行目foreachによるループでターム情報をひとつづつ取り出します。
3行目ターム名を取得します。
4行目ターム一覧(アーカイブ)ページのURLを取得します。
5行目必要に応じた形でHTMLを出力します。
タームごとの一覧(アーカイブ)ページを表示する
タームの一覧ページ用に「taxonomy.php」をテーマフォルダ内に作成します。
複数のカスタムタクソノミーが存在している時は、「taxonomy-***.php」というファイル名(***はタクソノミーのスラッグ)にすることで、各タクソノミーごとに一覧ページのレイアウトを使い分けることができます。
タームに属するページを全て取得するには「WP_Query」を使います。
taxonomy-***.php
<ul class="archive_taxonomy"> <?php $myTerm_object = get_queried_object(); //現在のタームオブジェクトを取得 $myTerm_slug = $myTerm_object->slug; //現在のタームスラッグを取得 $args = array( 'post_type' => 'items',//どのカスタム投稿タイプか 'taxonomy' => 'items-cate',//どのカスタムタクソノミーか 'term' => $myTerm_slug,//現在のタームを指定 'posts_per_page' => -1 // -1にすると全件表示 ); $custom_query = new WP_Query( $args );//条件を元にページを取得 ?> <?php if($custom_query->have_posts())://ページの有無 ?> <?php while($custom_query->have_posts())://ループ処理 ?> <?php $custom_query->the_post();//the_postはループ内で値をカウントアップする役目 ?> <li> <a href="<?php the_permalink(); ?>"><?php echo esc_html($post->post_title); ?></a> </li> <?php endwhile;// ?> <?php endif;//if($custom_query->have_posts()) ?> </ul>
3行目get_queried_object関数で、現在表示されているページの情報を取得します。
4行目現在のタームのスラッグを取得します。
5行目~WP_Queryの条件を設定します。どのカスタム投稿タイプのどのカスタムタクソノミーかを指定しています。
11行目条件に基づいてページを取得します。
13行目条件に合致するページの有無で分岐させます。
14行目条件に合致するページが存在する場合はループで取り出していきます。
17行目必要に応じた形でリンクやページタイトルをHTMLで出力します。
タームの一覧を出力する
カスタムタクソノミーに登録してあるタームを全て取得するには「get_terms」関数を使います。
PHP
<ul class="list_terms"> <?php $myTerms = get_terms('items-cate'); foreach($myTerms as $myTerm): ?> <li> <a href="<?php echo esc_url(get_term_link($myTerm->slug,'items-cate'));//タームへのリンク ?>"> <?php echo esc_html($myTerm->name);//ターム名 ?> </a> </li> <?php endforeach; ?> </ul>
3行目get_terms関数の引数にカスタムタクソノミー名を指定して、登録してあるタームを全て取得します。
4行目foreachによるループでタームをひとつづつ取り出します。
7行目8行目必要に応じてget_term_linkなどを使ってリンクやターム名をHTMLへ出力します。
タームの表示順を変更する
get_termsはタームのスラッグを基準にアルファベット順にタームを取得するため、自由に順番を並べ替えて出力するには追加の処理が必要です。
タームを任意の順番で表示する方法についてはこちらのページにまとめています。
WP管理画面のカスタム投稿一覧の表示カラム(列)を増やす
管理画面のカスタム投稿一覧は初期状態では「タイトル」と「日付」の2つのカラムしか表示されません。
こちらもfuncitons.phpへ追記を行えば、「カテゴリー」や「タグ」といったカラムを表示させることが可能です。
また、標準の投稿一覧と同じようにカテゴリーによる絞込機能も有効化できます。
WP管理画面のカスタム投稿一覧の表示カラム(列)を増やす方法についてはこちらのページにまとめています。
まとめ
以上が、カスタムタクソノミーを使ってカスタム投稿タイプでカテゴリーやタグを設定する方法です。
カスタムタクソノミーを使用することで、カスタム投稿のコンテンツをより細かく構造化することができます。