web-dev-qa-db-ja.com

Wp_nav_menuアイテムにサブメニューがあるか確認してください

私はwp_nav_menuを通してメニューのために以下のマークアップを出力しようとしています、

<ul>
        <li><a href="/">Home</a></li>
        <li>
            <a href="/" aria-haspopup="true">Blog</a>
            <ul>
                <li><a href="/">Design</a></li>
                <li><a href="/">HTML</a></li>
                <li><a href="/">CSS</a></li>
                <li><a href="/">JavaScript</a></li>
            </ul>
        </li>
</ul>

メニュー項目にサブメニューがあるかもしれません - その場合、トップレベルリンクは上の例のようにフォーマットされる必要があります。私はコーデックスを調べながらさまざまな解決策を試しましたが、成功しませんでした。たくさんのクエリを追加したいのでなければ、ウォーカーを作成する必要があるようです(メインループ内でサブメニューループを実行する)。しかし、それは非常に小さな変更なので、代わりにメニュー出力にフィルタフックを追加することは可能ではないでしょうか?

2
Staffan Estberg

私が正しく理解しているならば、あなたはサブメニューとのリンクにaria-haspopupの属性を持たせたいです。これが正しければ、nav_menu_link_attributesフィルタ(WP 3.6以降)を使ってそうすることができるはずです。また、フィルタ内のCSSクラスをチェックすることで、項目に子があるかどうかを確認するためのカスタムWalkerを作成する必要性を回避することもできます。

add_filter( 'nav_menu_link_attributes', 'wpse154485_add_aria_haspopup_atts', 10, 3 );
function wpse154485_add_aria_haspopup_atts( $atts, $item, $args ) {
  if (in_array('menu-item-has-children', $item->classes)) {
    $atts['aria-haspopup'] = 'true';
  }
  return $atts;
}
8
nothingtosee