2017年9月22日金曜日

カスタム投稿タイプのカテゴリーとタグの表示

前回からの続き

カスタム投稿タイプの個別投稿でのカテゴリーとタグの表示

Wordpressでカスタム投稿タイプの個別投稿を表示したらカテゴリーとタグがちゃんと表示されなかった。それは当然で標準の投稿タイプのテンプレート (single.phpから呼び出す)content.php をコピーした content-oldblog.phpにそのあたりの修正をしなかったから。

というわけで以下のように修正する。

<?php the_category(' '); ?>
<?php the_tags('', ', '); ?>
↓
<?php $tax = get_post_type_object(get_post_type())->taxonomies; ?>
<?php echo get_the_term_list($post->ID, $tax[0]); ?>
<?php echo get_the_term_list($post->ID, $tax[1], '', ', '); ?>

こんな感じで。本当はCSSで表示の調整ができるように<div>や<span>を適度に使用しているけどここでは省略した。以下も同じです。

ところでタクソノミー関連の関数がたくさんあって戻り値も複雑で軽く混乱した。
すべてが終わってから考えたんだけどカスタム投稿タイプも標準の投稿タイプのようにカテゴリーとタグを標準で使えるようにすればいいのにと思った。で、the_category() とか the_tags() のような関数もカスタム投稿タイプで使えるようにすれば楽だし統一感もある。the_title()とかはそのまま使えてるわけだし。でカテゴリーとタグだけでは足りない場合にタクソノミーを使えばいいわけで。

サイドバーのカテゴリー、タグ、月別アーカイブのカスタム投稿タイプ対応

カテゴリー一覧とタグ一覧

管理画面のウィジェットにあるカテゴリーとタグクラウドではカスタム投稿タイプのは表示されないので sidebar-oldblog.php にコードを書くことになる。

<!-- カテゴリー -->
<li class="widget widget_categories">
<h2>旧ブログでのカテゴリー</h2>
  <ul>
  <?php wp_list_categories(array(
     'taxonomy' => 'oldblog_cat',
     'title_li' => '',
//     'hide_empty' => false,
    )); ?>
  </ul>
</li>
<!-- タグ --> <li class="widget widget_tag"> <h2>旧ブログでのタグ</h2> <ul> <?php wp_list_categories(array( 'taxonomy' => 'oldblog_tag', 'title_li' => '', // 'hide_empty' => false, )); ?> </ul> </li>

こうして構築中はカスタム投稿タイプへの投稿はすべて非公開にしていたのだけどそうするとカテゴリーやタグが表示されない。そのため確認が行えない。こういうときは 'hide_empty' => false とすれば非公開にしている投稿のカテゴリーやタグも表示される。
で、確認が済んだらコメントアウトした。もちろんその行を削除してもいい。

<li class="widget widget_categories"> とかはサイドバーウィジェットの仕組みに合わせた形にするため。

今思うとパラメータ指定の
'taxonomy' => 'oldblog_cat'
'taxonomy' => 'oldblog_tag'
 のところは上記の single-oldblog.php の修正のように get_post_type_object(get_post_type())->taxonomies;
を使ったほうが汎用性が高まったかな。

月別アーカイブへのリンクリストの表示

<!-- 月別 -->
<li class="widget widget_archive">
<h2>旧ブログの月別アーカイブ</h2>
 <ul>
 <?php wp_get_archives(array(
    'post_type' => 'densan',
   )); ?>
 </ul>
</li>
とする。これにはちょっと気になることがあるけどそれは後の投稿で。

これでサイドバーへの表示の修正は一応完了した。

あとは検索して見つけて使用しているパンくずリスト表示のコードの修正をする。

次回に続く…

0 件のコメント:

コメントを投稿