特定の親ページのサブメニュー (子ページ) が表示されてはならない 3 レベルのトップメイン メニューを取得しようとしています。私は次のようになる必要があります:
- 製品
- 製品 1
- 製品1A
- 製品 1 B
- 製品 2
- 製品2A
- 製品 2 B
- 製品 3
- サブサブメニューなし
- 製品 1
試してみchild_of
ましたが、うまくいきませんでした。
ありがとう、オックスエゲン
特定の親ページのサブメニュー (子ページ) が表示されてはならない 3 レベルのトップメイン メニューを取得しようとしています。私は次のようになる必要があります:
試してみchild_of
ましたが、うまくいきませんでした。
ありがとう、オックスエゲン
コメントの会話によると、メニュー要素の 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 ) ); ?>
PHP の知識があれば、独自の要件でワードプレス メニューをカスタマイズできます。親メニューとその子メニューを配列形式で提供する関数をビルドし、任意のレベルまでワードプレス メニューをカスタマイズできます。ここに解決策があります