それぞれの親カテゴリー(メニュー)の下の子カテゴリー(メニュー)は最初は非表示にしておいて、親カテゴリーをクリックすると、子カテゴリーが表示されるようなメニューを wp_nav_menu の出力を使って作成。
wp_nav_menu を使って出力すると、以下のようなクラスが自動的に付加されるので、子カテゴリー(メニュー)のページにアクセスした際に、その子カテゴリー(メニュー)を自動的に表示(開いた状態に)したり、そのリンクの色を変更して表示することが比較的簡単にできる。
スライドするメニューの内容は以下のようなもの。但し、この例はデザイン的なことやユーザビリティには配慮していないので、使用するアイコン画像、その表示のタイミング等に関しては別途考慮する必要がある。
register_nav_menus() でカスタムメニューの機能を有効にし、メニューを表示するロケーションを作成する。functions.php に以下を記述。
register_nav_menus(array( 'sidebar_nav'=>'Sidebar_Navigation' ));
サイドバーにカスタムメニューを出力する。
<div id="side-nav">
<?php wp_nav_menu(array('theme_location' => 'sidebar_nav')); ?>
</div><!-- end of #side-nav -->
以下をスタイルシートに記述する。
#side-nav ul.menu{
margin: 5px; /*デザインにあわせて指定*/
}
#side-nav ul.menu li { /*デザインにあわせて指定*/
font-size: 13px; font-size: 1.3rem;
color: #888;
line-height: 20px;
margin: 5px 0 0 0;
padding-left: 10px;
}
#side-nav ul.menu li a {
color: #888;
padding-left: 20px;
display: block; /*要素の幅いっぱいにするために指定*/
}
#side-nav ul.sub-menu {
padding-left: 20px; /*デザインにあわせて指定*/
margin-top: 0;
}
/*フーバー時の文字色と背景画像「■」の指定*/
#side-nav ul.menu li a:hover {
color: #333;
text-decoration: none;
background: url(images/menu_square.gif) no-repeat left center;
}
/*親カテゴリーのカスタムリンクのフーバー時の背景画像「+」の指定*/
#side-nav ul.menu li.menu-item-type-custom a:hover {
background: url(images/menu_plus.gif) no-repeat left center;
}
/*親カテゴリーのカスタムリンク「ホーム」のフーバー時の背景画像「■」の指定*/
#side-nav ul.menu li.menu-item-type-custom.home a:hover {
background: url(images/menu_square.gif) no-repeat left center;
}
/*選択されている子カテゴリの親カテゴリーのカスタムリンクのフーバー時の背景画像「+」の指定*/
/*クラス「selected」はスライドダウンして表示されている要素に jQuery で付与する*/
#side-nav ul.menu li.menu-item-type-custom.selected a:hover {
background: url(images/menu_minus.gif) no-repeat left center;
}
/*「selected」クラスが付いた子カテゴリのフーバー時の背景画像「■」の指定*/
#side-nav ul.menu li.menu-item-type-custom.selected ul.sub-menu li a:hover {
background: url(images/menu_square.gif) no-repeat left center;
}
/*ページが表示されているカテゴリに属するリンクのフーバー時の背景画像「■」の指定(上と同じことなので省略可能)*/
#side-nav ul.menu li.current-menu-ancestor ul.sub-menu li a:hover {
background: url(images/menu_square.gif) no-repeat left center;
}
/*「selected」クラスが付いた子カテゴリの親カテゴリーのリンクと文字色を指定*/
#side-nav ul.menu li.menu-item-type-custom.selected a {
background: #EEE;
color: #333;
}
/*「selected」クラスが付いた子カテゴリの背景は「none」に指定*/
#side-nav ul.menu li.menu-item-type-custom.selected ul.sub-menu li a {
background: none;
color: #888;
}
/*「selected」クラスが付いた子カテゴリのフーバー時の文字色を指定*/
#side-nav ul.menu li.menu-item-type-custom.selected ul.sub-menu li a:hover {
color: #333;
}
jQuery でナビゲーションのスライドアニメーションおよび、ページ遷移時の子カテゴリーのslideDown(該当するカテゴリーを開いた状態で表示)を記述する。
注意する点としては、クリックする要素を、$(‘#side-nav ul.menu>li’) とすると、サブメニューをクリックした際にも作動してしまうので、$(‘#side-nav ul.menu>li>a’) としている。
//sidebar ナビゲーションのスライドアニメーション
$('#side-nav ul.sub-menu').hide();
$('#side-nav ul.menu>li>a').click(function(event) {
var this_ul = $(this).closest('li').find('ul');
$('#side-nav ul.sub-menu').slideUp(300);
$('#side-nav ul.menu>li').removeClass('selected');
if(this_ul.css('display') == 'none') {
this_ul.slideDown(300);
$(this).closest('li').addClass('selected');
}
});
//現在表示されているページの ul 要素をスライドで表示させる。
$('#side-nav ul.menu>li.current-menu-ancestor ul').slideDown(50);
//現在表示されているページの親の li 要素にクラス'selected'を追加(背景色が付き、フーバー時の背景画像が「-」印になる)
$('#side-nav ul.menu>li.current-menu-ancestor ul').parent('li').addClass('selected');
//現在表示されているページのリンクは色を変え、カーソルをデフォルトに
$('#side-nav ul.menu>li.current-menu-item a, #side-nav ul.menu>li ul li.current-menu-item a').css({cursor:'default',color: '#333', background: '#FDF5FE'});
//現在表示されているページのリンクはクリックしても何もしない
$('#side-nav ul.menu>li.current-menu-item a, #side-nav ul.menu>li ul li.current-menu-item a').click(function() { return false; });
//個別ページが表示されれいる場合は、なぜかcurrent-menu-ancestorが付かないので、個別ページの親のメニューが非表示になっていればそれをスライドダウンで表示する
if($('#side-nav ul.menu>li ul li.current-menu-parent').parent('ul').css('display') == 'none') {
$('#side-nav ul.menu>li ul li.current-menu-parent').parent('ul').slideDown(50);
//現在表示されているページの親の li 要素にクラス'selected'を追加
$('#side-nav ul.menu>li ul li.current-menu-parent').parent('ul').parent('li').addClass('selected');
//現在表示されているページの親のリンクの背景色と文字色を変える
$('#side-nav ul.menu>li ul li.current-menu-parent a').css({color: '#333', backgroundColor: '#FDF5FE'});
}