web-dev-qa-db-ja.com

"fall"の代わりに "div"をレンダリングするメニュー代替 "menu_class"

私は自分が取り組んでいる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

    ));

 }
1
Johann

まず、 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でそれを説明する必要があるでしょう。

4
Chip Bennett