ワードプレスのメニューをカスタマイズする方法
ワードプレスのメニューのデザインは、ほとんどテーマに依存しますよね。
なので、カスタマイズする場面は、あまりないのかもしれません。
でも、業務のサイトを作り時には、テーマに依存しなかったり、ユーザーさんの要望があったりして、
結構メニューのカスタマイズの需要が出ることがあります。
ワードプレスのメニューは、設定されていないクラスがぶら下がっていますので、吐き出されたHTMLのソースコードを確認して、そのクラスに対して、新しい属性を設定してあげればいいわけです。
menu:ターゲットのメニューのID か スラッグ もしくはメニュー名
menu_class:メニューを構成する ul 要素に適用するCSS クラス名
menu_id:メニューを構成する ul 要素に適用するID
container:ul をラップするタグ ( div , nav , もしくはなし(=false)
container_class:コンテナに適用されるクラス名
container_id:コンテナに適用されるID
fallback_cb:メニューが存在しない場合にコールバック関数を呼び出す
before:リンクテキストの前のテキスト
after:リンクテキストの後のテキスト
link_beforeリンクの前のテキスト
link_after:リンクの後のテキスト
echo:メニューをHTML出力する(true)か、PHPの値で返す(false)か
depth:何階層まで表示するか。0 は全階層。
walker:使用するカスタムウォーカーオブジェクト (高度すぎるのでパスwww)
theme_location:テーマの中で使われる位置。register_nav_menu()
items_wrap:
%1$s:’menu_id’
%2$s:’menu_class’
%3$s:リスト項目
初期値: &kt;ul id=”%1$s” class=”%2$s”>%3$s</ul>
ねらい目は、link_before , link_after。
リスト項目は、デフォルトでは、こんな感じで吐き出されます。
link_before , link_after を使って リンク部分を div でくくることでリンクテキスト部分のデザインをカスタマイズできます。
形ができてしまえば、あとは クラスを使ってデザインをいじれるってことになりますね。
なので、カスタマイズする場面は、あまりないのかもしれません。
でも、業務のサイトを作り時には、テーマに依存しなかったり、ユーザーさんの要望があったりして、
結構メニューのカスタマイズの需要が出ることがあります。
メニューのカスタマイズ
テーマにくっついてるメニューは、基本的に触れません。いや、触れるけど、かなり苦労する。ワードプレスのメニューは、設定されていないクラスがぶら下がっていますので、吐き出されたHTMLのソースコードを確認して、そのクラスに対して、新しい属性を設定してあげればいいわけです。
ワードプレスのメニューを貼り付ける
カスタマイズメニューのひな形は、これを使います。<?php
$defaults = array(
'menu' => ",
'menu_class' => 'menu',
'menu_id' => '{メニューのスラッグ}-{連番}',
'container' => 'div',
'container_class' => 'menu-{メニューのスラッグ}-container',
'container_id' => ",
'fallback_cb' => 'wp_page_menu',
'before' => ",
'after' => ",
'link_before' => ",
'link_after' => ",
'echo' => true,
'depth' => 0,
'walker' => ",
'theme_location' => ",
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
);
?>
<span id="sidebarwidjet"><?php wp_nav_menu( $defaults ); ?></span>
menu:ターゲットのメニューのID か スラッグ もしくはメニュー名
menu_class:メニューを構成する ul 要素に適用するCSS クラス名
menu_id:メニューを構成する ul 要素に適用するID
container:ul をラップするタグ ( div , nav , もしくはなし(=false)
container_class:コンテナに適用されるクラス名
container_id:コンテナに適用されるID
fallback_cb:メニューが存在しない場合にコールバック関数を呼び出す
before:リンクテキストの前のテキスト
after:リンクテキストの後のテキスト
link_beforeリンクの前のテキスト
link_after:リンクの後のテキスト
echo:メニューをHTML出力する(true)か、PHPの値で返す(false)か
depth:何階層まで表示するか。0 は全階層。
walker:使用するカスタムウォーカーオブジェクト (高度すぎるのでパスwww)
theme_location:テーマの中で使われる位置。register_nav_menu()
items_wrap:
%1$s:’menu_id’
%2$s:’menu_class’
%3$s:リスト項目
初期値: &kt;ul id=”%1$s” class=”%2$s”>%3$s</ul>
ねらい目は、link_before , link_after。
リスト項目は、デフォルトでは、こんな感じで吐き出されます。
(container class=(container_class))
<ul class="menu" id=(container_id)>
<li class="・・・">
<a href="・・・" class="・・・"> ・・・ </a>
</li>
<ul class="sub-menu">
<li class="・・・">
(link_before )
<a href="・・・" class="・・・">(before) ・・・ (after)</a>
(link_after)
</li>
</ul>
</ul>
link_before , link_after を使って リンク部分を div でくくることでリンクテキスト部分のデザインをカスタマイズできます。
<?php
$defaults = array(
'menu' => 'Menu 2 side',
'menu_class' => 'menu',
'menu_id' => ",
'container' => ",
'container_class' => ",
'container_id' => ",
'fallback_cb' => 'wp_page_menu',
'before' => ",
'after' => ",
'link_before' => '<div class="papa">',
'link_after' => '</div>',
'echo' => true,
'depth' => 0,
'walker' => ",
'theme_location' => ",
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
);
?>
<span id="sidebarwidjet"><?php wp_nav_menu( $defaults ); ?></span>
<style>
#menu-menu-2-side.menu .papa:link{
color:#2a8e84;
}
#menu-menu-2-side.menu .papa:visited{
color:#2a8e84;
}
#menu-menu-2-side.menu .papa:hover{
color:#fff;
background-color:#2a8e84;
text-decoration:none;
}
a:-webkit-any-link{
text-decoration:none;
}
#menu-menu-2-side.menu .papa:active{
color:#2a8e84;
}
#menu-menu-2-side.menu .papa{
font-size:14px;
color:#2a8e84;
margin:10px 0;
padding:14px 10px;
border:1px solid #2a8e84;
}
#menu-menu-2-side.menu .papa::before {
font-family: dashicons;
content: '\f345';
}
#menu-menu-2-side ul.sub-menu .papa{
margin:5px 0;
padding:0px 10px;
border:none;
}
ul#menu-menu-2-side.menu{
list-style-type:none !important;
-webkit-padding-start: 0px;
}
#menu-menu-2-side ul.sub-menu{
list-style-type:none;
-webkit-padding-start: 20px;
}
</style>
形ができてしまえば、あとは クラスを使ってデザインをいじれるってことになりますね。
スポンサーリンク