私は自分が取り組んでいるWordPressテーマの代替メニューに取り組んでいます。メインメニューのmenu_class
は、私が欲しいものであるul
をレンダリングします。
ただし、メニューのフォールバックを使用すると、menu_class
は代わりにdiv
をレンダリングします。 Wordpressにフォールバックメニューのul
ではなくdiv
をレンダリングさせる方法はありますか?
これが私のコードです:
function clarity_main_nav_fallback() {
wp_nav_menu(array(
'show_home' => true,
'container' => false, // remove nav container
'container_class' => 'menu clearfix', // class of container (should you choose to use it)
'menu_class' => 'nav navbar-nav' // adding custom nav class
));
}
まず、 wp_nav_menu()
引数を混同していると思います。 'menu_class'
パラメータはmenu要素に追加されるクラスを定義します。デフォルトでは<ul>
パラメータと同様に'items_wrap'
です。デフォルトの'menu_class'
は'menu'
で、これは<ul class="menu">
になります。
本当の問題は、実際にはfallback_cb
- メニューが定義されていないときに使われるコールバック - です(デフォルトは wp_page_menu()
です。
現在、wp_nav_menu()
とwp_page_menu()
は、デフォルトでコンテナ(<ul>
)でラップされた順不同リスト(<div>
)を出力します。 wp_nav_menu()
への呼び出しには、'container' => false
があります。これは、コンテナー<div>
でラップされているメニューリストをオーバーライドします。しかし、そのパラメータはデフォルトのwp_page_menu()
コールバック出力に渡されません。
最も簡単な解決策はあなた自身のコールバックを定義することです:
wp_nav_menu( array(
// Add your normal args here
'fallback_cb' => 'wpse116656_nav_menu_cb'
) );
次にコールバック関数を宣言します。
function wpse116656_nav_menu_cb() {
wp_page_menu( array(
// Args here
) );
}
さて、ここで警告があります:
wp_nav_menu()
は'menu_class'
パラメータを番号なしリストに適用します
(<div><ul class="$menu_class"></ul></div>
)
wp_page_menu()
は'menu_class'
パラメータをメニューリストの外側のラッパーコンテナに適用します
(<div class="$menu_class"><ul></ul></div>
)
だから、あなたはあなたのCSSでそれを説明する必要があるでしょう。