今回は、以下の画像のような、ナビゲーションメニューの項目をホバーした時に、サブメニューが表示される方法を解説します。

目次
ナビゲーションメニューに副項目が表示されないときの対処法
それでは、ナビゲーションメニューに副項目を表示させる方法を順を追って解説したいと思います。
WordPressのダッシュボード ➡️ 外観 ➡️ テーマエディターで『functions.php』と『header.php』をカスタマイズします。

追加する内容
functions.php
class custom_walker_nav_menu extends Walker_Nav_Menu {
function start_lvl(&$output, $depth = 0, $args = array()) {
$output .= '<div class="header-nav-child"><div class="container"><ul class="sub-menu">';
}
function end_lvl(&$output, $depth = 0, $args = array()) {
$output .= '</ul></div></div>';
}
}
header.phpで使用するクラスを設定する。
header.php
<nav class="header-nav">
<div class="inner">
<?php
wp_nav_menu(
array(
'menu' => 'main', //メニュー管理画面で登録したメニュー名
'container' => '',
'container_id' => '',
'container_class' => '',
'menu_id' => '',
'menu_class' => 'header-items',
'walker' => new custom_walker_nav_menu
)
);
?>
</div><!-- /inner -->
</nav><!-- header-nav -->
⭐️Point
『’walker’ => new custom_walker_nav_menu』を追加する。
2.wordpressのメニューで副項目を設定
以下の画像の手順で、wordpressのメニューで副項目を設定しましょう!


3.ブラウザで副項目が反映されているか確認し、CSSでレイアウトをする。
ブラウザで、副項目が出ていることを確認できたら、CSSでレイアウトを整えましょう!
CSSで、ナビゲーションメニューの項目をホバーした時に、サブメニューが表示されるように設定します。
CSS
/* 親メニューをrelativeに */
.menu-item-has-children {
position: relative;
}
/* マウスオーバーしたときにカーソルを変更 */
.menu-item-has-children:hover {
cursor: pointer;
}
/* 子メニューを持つ親メニューにマウスホバーしたとき副項目を表示 */
.menu-item-has-children:hover .header-nav-child {
display: block;
}
/* サブメニューをabsoluteにして親メニューの下に配置。*/
.header-nav-child {
display: none;
position: absolute;
top: 100%;
left: -44px;
width: 200px;
background: white;
box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);
padding: 20px;
z-index: 100;
}
.header-nav-child > .menu-item:not(:last-child) {
border-bottom: 1px solid #eee;
}
.header-nav-child > .menu-item a {
display: inline-block;
width: 100%;
height: 100%;
padding: .5em 0;
}
.header-nav-child > .menu-item a:hover {
background: black;
color: white;
}
.sub-menu {
display: flex;
}
.sub-menu li:first-child {
margin-right: 0;
margin-bottom: 20px;
}
.sub-menu li:last-child {
margin-right: 0;
margin-bottom: 0px;
}
.header-nav .sub-menu li:nth-child(1) > a::before {
content: "\f44b";
}
.header-nav .sub-menu li:nth-child(2) > a::before {
content: "\f70c";
}
ブラウザでの表示

これで、サブメニューを設定することが出来ました!
もし、レイアウトを変更したのに反映されないという方は、キャッシュを削除してみましょう!
キャッシュを削除する方法は、以下の記事で解説しています。
レイアウトを変更したい場合は、CSSでぽちぽちと変更しましょう。
まとめ
1.wp_nav_menu をカスタマイズする 2.wordpressのメニューで副項目を設定 3.ブラウザで副項目が反映されているか確認し、CSSでレイアウトをする |
それでは、最後まで読んでいただきありがとうございました。
タグ