• HOME > 
  • WordPress > 
  • WPのカスタム投稿タイプでカテゴリーやタグを設定できるように...

WPのカスタム投稿タイプでカテゴリーやタグを設定できるようにする【カスタムタクソノミー】

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像
広告
広告

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」というファイル名(***はタクソノミーのスラッグ)にすることで、各タクソノミーごとに一覧ページのレイアウトを使い分けることができます。

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管理画面のカスタム投稿一覧の表示カラム(列)を増やす方法についてはこちらのページにまとめています。

まとめ

以上が、カスタムタクソノミーを使ってカスタム投稿タイプでカテゴリーやタグを設定する方法です。

カスタムタクソノミーを使用することで、カスタム投稿のコンテンツをより細かく構造化することができます。

広告
広告

関連する記事

サムネイル

WPのカテゴリー内の項目(ターム)の表示順を変更【プラグイン……

2024年12月03日
WordPressにおいてカテゴリーの項目(ターム)を一覧表示させたときの表示順をプラグインを使わずに変更する方法を学んだので備忘録として残しておきます。 ター […]
サムネイル

WPのカスタム投稿一覧表への列(カラム)の追加と並び替え【プ……

2024年12月03日
WPのカスタム投稿タイプを作ってサイトを構築していく中で、管理画面上での一覧ページに任意の列(カラム)を追加したり、表示順を並び替える方法を学んだので備忘録とし […]
サムネイル

WPでカスタム投稿タイプを追加してページを分類する方法

2024年12月03日
WordPressのカスタム投稿機能を使ってぺージを分類する方法について学んだので備忘録としてまとめます。 カスタム投稿タイプとは? WordPressでは、標 […]
サムネイル

WPで下書きページを第三者と共有できるプラグイン【Publi……

2024年11月07日
WordPressにおける下書き状態のページは非ログイン状態では閲覧することができないので、新規追加予定ページをクライアントにチェックしてもらう時の良い方法を探 […]
サムネイル

WordPressの予約語とは?【カスタム投稿タイプ・カスタ……

2024年11月07日
WordPressのカスタム投稿タイプやカスタムタクソノミーを扱うにあたり、予約語について学んだので備忘録としてまとめます。 予約語とは? WordPressで […]
サムネイル

WPから送信したメールがGmailに届かない時の対応【WP ……

2024年08月01日
WordPressのCF7で作ったメールフォームから送信されたメールがGmailだと受信できなくなっていることに気づきました。WP側の送信方法を見直す必要があり、WP Mail SMTPというプラグインを導入することで解決できたので、そのとき学んだ内容を備忘録として残します。