WordPressでサイトを作成する際に、カテゴリ毎のサイドメニューを表示させたい場合の設定方法をメモしておきます。

2015/01/20 追記
仕様3が抜けていたので、追記しました。

仕様

  1. ページを「固定ページ」で作成し、「親ページ」=「カテゴリトップ」とし、子ページ、孫ページの一覧がサイドメニューとして表示される。
  2. 子ページがない場合は、サイドメニューを表示させない。
  3. カスタムフィールド「サイドメニューに表示する」を作成し、チェックの有無で表示を切り替える

今回は、以前メモした記事【WP】WordPressで固定ページの階層化されたサイドメニューを表示させるに、仕様2、3を追加した進化バージョンです。

以下のテンプレートと、別途「サイドメニューに表示・非表示」を切り替えるカスタムフィールドの設定が必要です。

カスタムフィールド

フィールドラベル:サイドメニューに表示させる(任意の名前)
フィールド名:side_menu_on
フィールドタイプ:真/偽

テンプレート

<div id="sub">
<?php
	if($post->post_parent)
	$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
	else
	$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
	if ($children) { ?>
	<?php
		$ancestor = array_pop( get_post_ancestors( $post->ID ) );
		$top_parent_permalink = get_permalink( $ancestor );
		$top_parent_title = get_the_title( $ancestor );
		?>
		<section id="subNav">
			<h1><a href="<?php echo ($top_parent_permalink);?>"><?php echo ($top_parent_title);?></a></h1>
			<ul>
			<?php
					$parent = array_reverse($post->ancestors);
					if($parent) {
							$pages = $parent[0];
						}else{
							$pages = $post->ID;
						}
					
					if($pages){
						if ( $list_pages = wp_list_pages( 'title_li=&echo=0') ) {
							wp_list_pages('echo=1&sort_column=menu_order&meta_key=side_menu_on&meta_value=1&title_li=&child_of='. $pages);
							}
						}
				?>
			</ul>
		</section>
		<?php } ?>
</div><!-- /#sub -->