WordPressにjQueryでアコーディオンメニューを追加する
WordPressのヘッダーメニューを、スマホとPCで別々にデザインしました。
作り方を忘れないように、備忘録としてメモしておきます。
ヘッダーメニューのデザイン
PC版(768px以上)
一般的なシンプルなヘッダーメニュー。
項目は6つまで追加できる。

スマホ版(768px未満)
スマホではアコーディオンメニューに表示が切り替わる。
MENUをタップすると開閉する。

アコーディオンメニューを開いたイメージ。
jQueryのslideToggleを使って項目の表示と非表示を切り替えている。

ヘッダーメニューのデザイン
スマホ用のメニューバーを作る
header.phpのヘッダーメニューに関するコードの下に、メニューバーに関するコードを追加します。
<div>で囲ってidをつけておきます。
<!--ヘッダーメニュー-->
<?php wp_nav_menu( array(
'theme_location' => 'header-nav',
'container' => 'nav',
'container_class' => 'header-nav cb',
'container_id' => 'header-nav',
'fallback_cb' => ''
) ); ?>
<!--スマホ用メニューバー-->
<div id="navbar" class="cb">
<i class="fas fa-list-ul"> MENU</i>
</div>style.cssに、スマホでのみ表示されるようにメディアクエリを書きます。
僕はSassで書いているので、CSSで書いている方は各自で読み替えてください。
/*スマホ用のメニューバー*/
#navbar {
background-color: $accentColor;
color: #fff;
text-align: center;
padding: 4px 0;
cursor: pointer;
@include md {
display: none;
}
}includeを使って、下のmixinを呼び出しています。
768px以上でdisplay: noneが有効になるため、PCではメニューバーが非表示になります。
$sm: 576px;
$md: 768px;
$lg: 992px;
$xl: 1200px;
@mixin sm {
@media (min-width: ($sm)) {
@content;
}
}
@mixin md {
@media (min-width: ($md)) {
@content;
}
}
@mixin lg {
@media (min-width: ($lg)) {
@content;
}
}
@mixin xl {
@media (min-width: ($xl)) {
@content;
}
}
項目の表示切り替え
メニューの項目はメニューバーがクリックされるまでは非表示にしておきます。
ただし、PCでは最初から表示するようにメディアクエリで分けます。
#header-nav {
display: none;
background: $mainColor;
@include md {
display: block!important;
}
}
項目部分のデザイン
項目部分をデザインしていきます。
スマホ用の記述をしたあとに、includeで768pxを超えたときの記述をしています。
.header-nav {
padding: 0 10px;
@include md {
margin: 0 auto;
box-sizing: border-box;
}
ul {
margin: 0 auto;
padding: 0;
letter-spacing: -.4em;
max-width: $xl;
list-style: none;
@include md {
text-align: center;
}
}
li {
border-top: 1px solid $baseColor;
padding: 5px 0;
letter-spacing: 0em;
&:first-child {
border-top: none;
}
@include md {
display: inline-block;
border-top: none;
width: calc(100% / 6 - 7px);
border-left: 1px solid #fff;
&:last-child {
border-right: 1px solid #fff;
}
transition: background 0.2s ease-in-out;
&:hover {
background: $accentColor;
}
}
a {
display: block;
padding: 15px 5px;
color: #fff;
font-weight: bold;
font-size: 1em;
text-decoration: none;
@include md{
font-size: 1.1em;
padding: 0 10px;
margin-bottom: 3px;
}
}
}
}

li要素が768px以上になるとdisplay: inline-blockが適用されるので、横並びに切り替わります。
jQueryでタップしたら開閉する処理を作る

メニューバーをタップ(クリック)すると、メニューの項目に対してslideToggleが実行されます。
jQuery(function(){
jQuery('#navbar').click(function() {
jQuery('#header-nav').slideToggle();
});
});

WordPressではjQueryを省略して$で記述すると動かない点に注意しましょう。