WordPressカスタマイズ事例

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

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

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

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

<?php
$taxonomy = 'blog_cat'; //タクソノミー

$the_term = get_term_by('slug', $term, $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カスタマイズ事例