よもやまチョモランマ

カスタムメニューをグローバルメニューとしてCSSカスタマイズ

WordPressだからって「カスタムメニュー」「ウィジェット」「アイキャッチ」を絶対に使わなければならないという法はない。
しかしながら、結局、これを使わないならWPにする意味もないんだよなぁと、場数をふむほどに痛感する今日この頃でございます。

そうでなくても、手間のかかるパーツ「グローバルメニュー」
ここをプルダウンにしようとすると、検索してもアナログ手法の記事ばかりヒットします。
さらにハンバーガーにまでしようものなら、膨大な行数のHTMLを書かなければなりません。

カスタムメニューなら1行で済むんですよ。
カスタムメニューにしましょうよ。

というわけで、カスタムメニューをグローバルメニューとして使用し、CSSでカスタマイズするまでのステップを整理しました。

1. function.php に記述

まず、カスタムメニューを有効にします。

register_nav_menus( array(
		'header_nav' => 'ヘッダーナビ',
		'footer_nav' => 'フッターナビ',
) );

2. メニューを作成

次に、外観~メニューで、メニューを作成。
メニュー名は英数字がいいです。日本語にするとパーマリンク同様、暗号が吐き出されます。
「-」とか「_」も無いほうがいいです。吐き出されるコードには前後に「-」でいろいろつくので、紛らわしくてCSSをあてづらくなります。

3. テンプレートに呼び出し

入れたいところに1行記述するだけ。
とはいえ、divで囲むくらいはしておきましょう。

<div id="header-nav">
<?php wp_nav_menu(array('theme_location' => 'header_nav')); ?>
</div>

4. SCCをあてるclass

吐き出されるソースはul・li要素になります。
付与されるクラス名も決まっています。
このクラス名にCSSをあてていきます。
・親の ul 要素には「menu」
・子の ul 要素には「sub-menu」
・全ての li 要素には「menu-item」
・現在表示されているページの li 要素には「current-menu-item」
・現在表示されているページの親の li 要素には「current-menu-parent」
・現在表示されているページの最も上の li 要素には「current-menu-ancestor」

5. 参考CSS

とりあえず、参考にしたページのソースを貼り付けておきます。
イイ感じの自分デフォが完成したら差し替えておいて・・・
【参考】wp_nav_menu の出力をドロップダウンメニューで表示

#header-nav {
	clear: both;
}
#header-nav ul#menu-nav {
  height: 30px;
}
#header-nav ul li.menu-item {
   position: relative; /*z-indexの指定や子要素の基準とするために指定*/
   z-index: 1; /*ドロップダウンしたメニューが隠れないように*/
   float: left; /*親メニューは横1列に並べる*/
  padding-right: 20px;
}
#header-nav ul li.menu-item a{ 
  display: block;    /*要素の幅いっぱいにするために指定*/
  height: 30px;
  line-height: 30px;
  color: #666;
  font-size: 12px; font-size: 1.2rem; 
  text-decoration: none;
}
/*マウスオーバー時等にメニューの色を変更*/
#header-nav ul li.menu-item a:hover,   /*マウスオーバー時*/
#header-nav ul li.current-menu-item a,     /*現在表示されているページのメニュー*/
#header-nav ul li.current-menu-parent a,  /*現在表示されているページの親のメニュー*/
#header-nav ul li.current-post-ancestor a {
  color: #000;    
}
 
#header-nav ul li.menu-item a:hover {
  background-color: #EEE;  /*マウスオーバー時に背景色を変更*/
}
 
#header-nav ul li ul.sub-menu {
  display: none;  /*サブメニューは最初は非表示にしておく*/
  position: absolute;  /*絶対配置にしておかないとうまくいかない*/
  top: 30px;
  left: 0;
  border-top: 1px solid #EEE;  /*ボーダートップを指定*/
  width: 160px;
}
#header-nav ul li:hover ul.sub-menu {
  display: block;    /*マウスオーバー時にサブメニューを表示する*/
}
#header-nav ul li ul.sub-menu li{
  float: none;  /*サブメニューはフロートさせないので解除*/
  padding: 0;  /*親メニューのパディングを解除*/
}
#header-nav ul li ul.sub-menu li a {  
  border: 1px solid #eee;  /*ボーダーの指定*/
  border-top: none;  /*ボーダートップは重なって太くなるので解除。一番上は ul 要素に指定*/
  padding: 0 10px;
  background-color: #FFF;
  color: #666;
  text-align: left;
}
/*サブメニューで現在表示されているページのリンクの色を変更する*/
#header-nav ul li ul.sub-menu li.current-menu-item a {
  display: block;
  background-color: #FBF3FE; 
}

こうして人間どんどんラクをおぼえてゆくのですね・・・