レーベルに進化しました。

[Cocoon] 現在表示してるカスタム投稿タイプの投稿にカスタムタクソノミーがあれば表示する

eniko kis citwN1D61WM unsplash scaled ブログ運営
この記事は約4分で読めます。

CocoonではPHPの構造としてネストしているので、single.phpを改造するだけだとダメなのです。まずは親テーマの中のsingle.phpを複製し、子テーマの中に置き、single-カスタム投稿タイプの名前.phpというファイル名に変え、中身の以下の部分を編集する。これでカスタム投稿タイプ用に動作を分けることになる。

<?php //投稿ページ内容
cocoon_template_part('tmp/single-contents-カスタム投稿タイプの名前'); ?>

その後、tmpというフォルダを子テーマの中に作り、親テーマのsingle-contents.phpを複製し、子テーマのtmpフォルダの中に置き、single-contents-カスタム投稿タイプの名前.phpという名前にし、中身の以下の部分を編集する。これもカスタム投稿タイプ用に動作を分ける仕組みの一つ。

<?php //本文テンプレート
cocoon_template_part('tmp/content-カスタム投稿タイプの名前') ?>

その後、親テーマのcontent.phpを複製し、子テーマのtmpフォルダの中に置き、content-カスタム投稿タイプの名前.phpという名前にし、以下の部分を任意の場所に追加する。

<?php //本文下のカスタムタクソノミーカテゴリー・タグ
        $post_type = get_post_type();
        $taxonomies = get_object_taxonomies($post_type, 'objects');

        $has_terms = false;

        if (!empty($taxonomies)) {
          foreach ($taxonomies as $taxonomy) {
            $terms = get_the_terms(get_the_ID(), $taxonomy->name);
            if ($terms && !is_wp_error($terms)) {
              $has_terms = true;
              // タクソノミーの名称を表示
              echo '<h3>' . esc_html($taxonomy->label) . '</h3>';
              echo '<ul>';
              foreach ($terms as $term) {
                $term_link = get_term_link($term);
                if (!is_wp_error($term_link)) {
                  echo '<li><a href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a></li>';
                } else {
                  echo '<li>' . esc_html($term->name) . '</li>';
                }
              }
              echo '</ul>';
            }
          }
        }
        ?>

ちなみに私は上記のコードを以下のコードの真下に置くことにした。

<?php //本文下のカテゴリー・タグ
        if (is_category_tag_display_position_content_bottom() && is_single()) {
          cocoon_template_part('tmp/categories-tags');
        } ?>