【WordPress】ホバーで親子メニューがわかるヘッダーの作り方
こんにちは!ひさしです。
「ヘッダーメニューは作ったことはあるけど、親子関係は使ったことがない」「階層化されたメニューを実装したいけど方法がわからない」と悩まれていませんか?
今回は、WordPressのメニュー機能を使用し、動的にわかりやすい管理方法で、親子関係がわかるヘッダーメニューの実装方法を紹介します。
【記事の目次】
デモ:完成のイメージ
まずは簡単なデモをご覧ください。
See the Pen Untitled by 小原悠 (@rasamonv-the-animator) on CodePen.
コーポレートサイトなどでよく見かける、「親子関係のあるヘッダーメニュー」です。
管理画面で親子メニューを設定する方法
ステップ1:固定ページの作成
まず、ヘッダーメニューを構成するのに必要な固定ページを作成します。例として「会社紹介」の下に「会社概要」、「代表メッセージ」、「スタッフ紹介」といったページを設定します。
次に、親子関係の設定を「ページ属性」の欄から行います。
これら手順で、ヘッダーメニューにするための固定ページを作成します。
ステップ2:メニューの作成
次に固定ページができたら、それらを使ってメニューを作成します。
1. ダッシュボードから「外観」>「メニュー」を選択します。
2. 次に、「メニュー名」に新しいメニューの名前を入力し、「メニューの位置」を選択。そして、「メニューを作成」ボタンをクリックします。
(注意)「メニューの位置」に選択肢を表示するには、functions.phpファイルに以下コードの記述が必要です。
<?php
//ヘッダー、フッターのカスタムメニュー化
register_nav_menus(
array(
'place_global' => 'ヘッダーナビ',
'place_footer' => 'フッターナビ',
)
);
?>
3.「メニュー項目を追加」からメニューに追加したいページを選択し、「メニューに追加」をクリックします。
この時、「すべて表示」というタブで探すと漏れなく見つけやすいです。
4. 追加されたページをドラッグ&ドロップで親子関係になるように並べ替えます。
図のように、親ページの右下に子ページを配置してください。
5. 「メニューを保存」をクリックし、保存します。
CSSによるホバー制御の追加
親メニューにマウスをホバーした際に子メニューが表示されるように、CSSをカスタマイズします。
1. まず、管理画面で保存したメニューをheader.phpで表示します。
今回は、当記事の前半で保存したヘッダーメニューを呼び出しています。
<header class="header">
<div class="header__inner">
<nav class="header__nav">
<?php
wp_nav_menu(
array(
'theme_location' => 'place_global', //functions.phpで指定した位置
'container' => false, //デフォルト生成のdivタグを抑制
'menu_class' => 'header__nav-list' //スタイリングのためのクラスを指定
)
);
?>
</nav>
</div>
</header>
出力されると下のコードのようになります。
<header class="header">
<div class="header__inner">
<nav class="top__nav fade-cont">
<ul class="header__nav-list">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-2677"><a href="#">会社紹介</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2680"><a href="#">会社概要</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2679"><a href="#">代表メッセージ</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2678"><a href="#">スタッフ紹介</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</header>
2. 次に、CSSでホバー制御を実装します。
今回は、カスタムクラスは追加せずWordPressによって自動生成されるクラス名を使用します。
.header__nav-list {
display: flex;
gap: 1px;
align-items: center;
list-style: none;
margin: 0;
padding: 0;
}
.header__nav-list > li {
width: 50%; /* liタグやaタグのcssはデザインに合わせて適宜変更してください */
}
.menu-item a {
display: block;
text-decoration: none;
padding: 10px 30px;
color: black;
text-align: center;
}
.menu-item-has-children {
position: relative;
}
.menu-item-has-children > a {
background-color: gray;
color: white;
font-weight: 700;
}
.sub-menu {
display: none; /* 初期状態では非表示 */
list-style: none;
position: absolute;
top: 100%; /* 親メニューの下に配置 */
left: 0;
background-color: silver;
width: 100%; /* 親メニューの横幅に合わせる */
margin: 0;
padding: 0;
}
.sub-menu li:nth-child(n+2) {
border-top: 1px solid white;
}
.sub-menu li > a:hover {
opacity: 0.4;
}
.menu-item-has-children:hover .sub-menu {
display: block; /* ホバー時に表示 */
}
/* レスポンシブ設定(画面幅768px以下) */
@media screen and (max-width:768px){
.menu-item a {
padding: 10px 5px;
}
}
このCSSは、親メニューにホバーした時に直下の子メニューだけを表示させ、他の子メニューは非表示にします。また、子メニューが親メニューの直下に位置するようにスタイリングしています。
まとめ
以上で、ホバーで親子関係がわかるヘッダーメニューの設定は完了です。このヘッダーを使えば、訪問者はより直感的にサイト内の行き来をすることができるようになります。デザインに合わせてカスタマイズしてください。
最後までお読みいただきありがとうございました。
また別の記事でお会いしましょう!