0

特定の親ページのサブメニュー (子ページ) が表示されてはならない 3 レベルのトップメイン メニューを取得しようとしています。私は次のようになる必要があります:

  • 製品
    • 製品 1
      • 製品1A
      • 製品 1 B
    • 製品 2
      • 製品2A
      • 製品 2 B
    • 製品 3
      • サブサブメニューなし

試してみchild_ofましたが、うまくいきませんでした。

ありがとう、オックスエゲン

4

2 に答える 2

0

コメントの会話によると、メニュー要素の id/class 属性で任意に生成された数値に依存するのは堅牢ではありません。しかし、メニュー項目の属性を制御できれば、そのスタイルを確実に制御できます

カスタム メニューを処理するベスト プラクティスは、"nav walker" を作成することだと思います。これにより、どの項目を HTML に出力するか (およびどのように出力するか) を制御できます。これにより、回避したい特定のメニュー項目をレンダリングしないか、スタイルアウトできる id/class フックを使用してレンダリングするかを選択できます。

このwp_nav_menu()チュートリアルでは、カスタム を設定するプロセスについて説明し、重要なことに、カスタムクラスwp_nav_menu()を追加する必要性について説明します。これについては、この Walker クラスの理解 tuteWalker_Nav_Menuで詳しく説明されています。

親アイテムのページ タイトルに基づいて、必要なことを行うための非常に基本的な方法をハックしました。Walker_Nav_Menuこれは基本的に、無視されたメニューノードに遭遇した場合に、許可されたトラバーサルの深さを超えたため、そのツリーブランチをたどらないと考えるように「トリック」します。functions.phpこれをファイルに追加します。

class Selective_Walker extends Walker_Nav_Menu {  

    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) { 

        if (in_array($element->title, array("Product 3"))) // Add any additional items as req'd to this array
            $depth = $max_depth + 1;

        parent::display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output );  
    }  
}

次に、テーマがナビゲーション メニューを追加する場所 (おそらくheader.php) で、 (既に使用している他のパラメーターに加えて) 呼び出しにwalkerパラメーターを追加wp_nav_menu()し、新しい walker クラスのインスタンスを渡す必要があります。

<?php wp_nav_menu( array('walker' => new Selective_Walker(), 'theme_location' => 'primary', 'depth' => 3 ) ); ?>
于 2013-06-18T12:33:02.313 に答える
-1

PHP の知識があれば、独自の要件でワードプレス メニューをカスタマイズできます。親メニューとその子メニューを配列形式で提供する関数をビルドし、任意のレベルまでワードプレス メニューをカスタマイズできます。ここに解決策があります

于 2015-12-01T08:20:43.783 に答える