WordPressカスタマイズ事例

記事が属するタームの兄弟ターム一覧を取得して表示する、しかも任意の並び替えもする

現在メインカラムに表示している記事があるとします。
サイドバーにはその記事が属するタームの親タームの子ターム、つまり記事が属するタームの兄弟タームを表示して、記事が属するタームにはクラスを付与、しかもタームの並び替えも任意でしてみようと思います。

タームの並び替えはプラグイン Category Order and Taxonomy Terms Order がおすすめです。このプラグインを使えば、WordPress管理画面でドラッグ&ドロップでカテゴリやタームの順番を替えることができて超簡単です。Category Order and Taxonomy Terms Order の’orderby’ は ‘term_order’ を使います。

テーマの sidebar.php に以下を記述します。

<?php
$taxonomy = 'blog_cat'; //タクソノミー
$term_slug = get_query_var('term');
$the_term = get_term_by('slug', $term_slug, $taxonomy);
$ancestors = get_ancestors($the_term->term_id, $taxonomy ); //現在のタームの親を取得
if($ancestors){
$ancestor_id = end($ancestors);
}else{
$ancestor_id = $the_term->term_id;
}
$args = array(
'parent'   => $ancestor_id,
'orderby'  => 'term_order',
'order'    => 'ASC'
);
$terms = get_terms($taxonomy,$args); //兄弟ターム一覧取得
?>
<div id="secondary" class="widget-area side-block" role="complementary">
<?php if($terms){ ?>
<div class="side-menu">
<div class="arrow_box"><h4>カテゴリ</h4></div>
<ul class="side-box">
<?php foreach ($terms as $term) {
$term_name = $term->name;
$blog_cat_link = get_term_link( $term->slug, $taxonomy );
$class = '';
if($term->term_id == $the_term->term_id){
$class = 'current-menu-item'; //現在記事の属するタームにクラスを付与
}?>
<li class="<?php echo $class; ?>"><a href="<?php echo $blog_cat_link; ?>"><?php echo $term_name; ?></a></li>
<?php }?>
</ul>
</div>
<?php } ?>

関連するWordPressカスタマイズ事例