カスタムタクソノミーの追加

続いて、カスタムタクソノミーについてみていきましょう。

カスタムタクソノミーとは

カスタムタクソノミーとは、ユーザーが定義できる「分類法」のことです。通常の投稿には「カテゴリ」と「タグ」という二つの「分類法」が設定されています。

これらの分類法に加えて、「サイズ別」「対象年齢別」などの新たな分類法を加えたい場合にはカスタムタクソノミーを設定することになります。

カスタムタクソノミーを設定する意義

カテゴリーやタグのようなデフォルトの分類法以外の分類法を利用する意義は2つあります。

  • 投稿する内容に応じてより適切な分類を行い、ユーザーがコンテンツを探しやすくする。
  • カテゴリー一覧・タグ一覧とは別種の「一覧ページ」を作成する

この2つのメリットを目的として、カスタムタクソノミーを設定することになります。

カスタムタクソノミーの設定方法

それでは実際にカスタムタクソノミーを設定してみましょう。

1. functions.phpによる設定

functions.phpに以下の記述を加えてみましょう。(カスタム投稿タイプの表記に追記します。)

functions.php

<?php 
// 中略

add_action( 'init', function () {
    register_post_type( 'zero_products', [ // 投稿タイプ名の定義
        'labels' => [
            'name'          => '商品', // 管理画面上で表示する投稿タイプ名
            'singular_name' => 'product',    // カスタム投稿の識別名
        ],
        'public'        => true,  // 投稿タイプをpublicにする。管理画面から使えるように。
        'has_archive'   => true,  // アーカイブ機能ON/OFF
        'menu_position' => 5,     // 管理画面上での配置場所
        'hierarchical' => false, // 階層構造は利用しない

        'taxonomy' => array('product_size'),

        'supports' => array(
          'title', // タイトルを利用する
          'editor', // 内容の編集
          'author', // 投稿者
          'thumbnail', // アイキャッチ画像
          'excerpt', // 抜粋
          'trackbacks', //トラックバック
          'custom-fields', // カスタムフィールド
          'comments', // コメント
          'revisions', // リビジョン
          'page-attributes', //メニューの順序
          'post-formats', //投稿フォーマット
          ),
    ]);
    register_taxonomy(
        'product_size',
        'zero_products',
        array(
            'hierarchical' => true, //階層を利用するか?
            'label' => '商品サイズ別', // メニュー用の表示名
            'public' => true, // フロントエンドから利用できる
            'show_ui' => true, // 管理画面に表示する。
            'query_var' => true, // タクソノミーを指定して取得できる
        )
    );
});

上記のように記述することで、「商品」カスタム投稿タイプにおいて「商品サイズ別」という分類を利用することができるようになります。

2. プラグインを利用した設定方法

前述した「Custom Post Type UI」というプラグインを利用することによって、functions.phpに手を加えずに管理画面から簡単にカスタムタクソノミーを作成することが可能です。(CPT UIと略されます。)

後ほどカスタム投稿タイプの設定方法と合わせてプラグインの利用方法をお伝えします。

カスタムタクソノミー設定方法の使い分け

カスタム投稿タイプの設定方法には

  1. functions.phpを利用する方法
  2. プラグインを利用する方法

の2種類があります。

  • テーマ特有のカスタム投稿タイプとして定義したい場合はfunctions.phpで定義
  • テーマに関わらず、設定したカスタム投稿タイプを利用したい場合はプラグインで定義

と使い分けていただくと良いでしょう。

パーマリンク設定について

上記のfunctions.phpの書き込みによって、カスタムタクソノミーが定義され、カスタム投稿タイプに設定できるようになりますが、実際にカスタムタクソノミーのページを開こうとするとリンク切れ(404)になってしまいます。

これは、カスタムタクソノミーに対応するパーマリンクの設定が完了していないことが原因です。カスタムタクソノミーを追加した場合には、ダッシュボードから「設定 > パーマリンク設定」の画面に移動し「変更の保存」のボタンを押す必要があります。

これにより、カスタムタクソノミーのパーマリンク設定が完了します。

カスタムタクソノミー向けのページテンプレート

カスタムタクソノミー向けのページテンプレートは

taxonomy-[タクソノミー名].php

というファイル名で作成します。

今回は

taxonomy-product_size.php

というファイルをcategory.phpをもとに作成して、 サイズ別の一覧ページを作成します。

taxonomy_product_size.php

<?php 
get_header(); 

get_template_part('templates/main_contents', 'product_size');

get_footer();

続いて、templates/main_contents-category.phpをもとに、templates/main_contents-product_size.phpを作成します。

main_contents-product_size.php

<main class="main_contents">
  <section class="content">
    <h2>サイズ別リスト</h2>
    <?php 

    get_template_part( 'templates/breadcrumb', 'product_size' );
    while(have_posts() === true){
      the_post(); 

      get_template_part('templates/content'); 

    }
    get_template_part('templates/pagination');

    ?>
  </section>
  <?php
    get_sidebar();
  ?>
</main>

サイズ別リストという見出しがついただけです。 最後に、パンくずリストにも手を入れます。

breadcrumb-product_size.php

<?php
//カテゴリオブジェクトを取得
$first_term = get_queried_object();
?>
<span class="breadcrumb" >
    HOME > 
    <?php 
        // 末尾の ' > ' を切り取る。
        print mb_substr(
            get_term_parents_list(
                $first_term->term_id,
                'product_size', 
                array(
                    'separator' => ' > ',
                    'link' => true,
                )
            ),
            0, 
            -3
        ); 
    ?>
</span>

こちらで、カスタムタクソノミーページの完成です。カテゴリーページの作成と同じ感覚で作成することが可能です。

さらなるカスタマイズ

前述の

  • カスタム投稿タイプ
  • カスタムフィールド
  • カスタム投稿タイプ向けのテンプレート

にカスタムタクソノミーを組み合わせることで、さらに発展したカスタマイズが可能です。 後の章で、これらを利用したカスタマイズについて紹介します。

results matching ""

    No results matching ""