WordPressテーマのメニューで出力されるHTMLを最小限にする
WordPressのテーマでメニューを作るとやたらとclassがついたものが出力される。必要なもの以外は省きたいので最小限の出力にする。
通常の状態では以下のようなメニューが出力される。
<div class="menu-mainmenu-container">
<ul>
<li id="menu-item-1024" class="menu-item menu-item-type-custom menu-item-object-page menu-item-1024"><a href="https://example.com/">メニュー1</a></li>
<li id="menu-item-1025" class="menu-item menu-item-type-custom menu-item-object-page menu-item-1025"><a href="https://example.com/">メニュー2</a></li>
<li id="menu-item-1026" class="menu-item menu-item-type-custom menu-item-object-page menu-item-1026"><a href="https://example.com/">メニュー3</a></li>
</ul>
</div>
目次
functions.php に追記
//テーマメニューを追加
add_action('after_setup_theme', function () {
register_nav_menu('mainmenu', 'メインメニュー');
});
//テーマメニューの出力をカスタマイズ
class custom_walker extends Walker_Nav_Menu
{
function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0)
{
$attr = '';
if ($item->target != '') {
$attr .= ' target="' . $item->target . '"';
}
if ($item->classes[0] != '') {
$attr .= ' class="' . $item->classes[0] . '"';
}
$output .= '<a href="' . $item->url . '"' . $attr . '>' . $item->title . '</a>';
}
function end_el(&$output, $item, $depth = 0, $args = array()) {
$output .= '';
}
}
最低限 target と class の指定は出来るようにしている。
テンプレートのメニューを表示する部分に記述
<?php
wp_nav_menu(array(
'theme_location' =>'mainmenu',
'container' => '',
'walker' => new custom_walker,
'items_wrap' => '%3$s'
));
?>
出力されるメニュー
<a href="https://example.com/">メニュー1</a><a href="https://example.com/">メニュー2</a><a href="https://example.com/">メニュー3</a>
最小限になった。