4

多くの関数 (wp_list_pages、get_pages、wp_nav_menu) といくつかの関数を 2 時間以上試していますが、この問題を解決できません。

3 レベルの深さのページを作成しました。

PAGE level1
    SUBPAGE level2
        SUBPAGE level3 

次のように、それぞれに個別のメニューを表示する必要があります。

MENU1 (all top-level pages)
MENU2 (all sub-pages of CURRENT top level page)
MENU3 (all sub pages of current item from MENU2)

Wordpress のような CMS ではそれほど複雑ではないはずですが、考えられる解決策を複雑にしすぎていると思います。それを達成するための可能な方法についていくつか提案はありますか?

ありがとう。

4

2 に答える 2

2

まず、メニュー項目とページの間の一致を定義する必要があります。私はあなたの質問からこの一致を定義することはできません。2つのlevel2サブページと2つのmenu2アイテムがある場合はどうなりますか?どのメニュー項目がどのサブページに属しますか?

その後、プロセスは簡単です。あなたはすべてのメニュー項目を得ることができます

$menu_items = wp_get_nav_menu_items($cur_menu, array());

そして、フィールドをチェックmenu_item_parentして親アイテムを見つけます

foreach ($menu_items as $item) {
    if ($item->menu_item_parent === $parent_id) {
        //this is child of $parent_id
    }
}
于 2012-12-21T19:05:24.280 に答える
0

WordPress Function を使用している場合は、register_nav_menus()かなり単純なはずです。

functions.php ファイルで、次のような 3 つの個別のメニューを登録する必要があります。

<?php
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
  register_nav_menus(
    array( 'first' => 'first', 'second' => 'second', 'third' => 'third', )
    );
  }
?>

メニューが登録されたので、次のようにテーマ ファイル内の場所に配置するだけです。

最初のメニュー(おそらく header.php ファイル内)

<div id="menu">
  <?php wp_nav_menu( array( 'theme_location' => 'first' ) ); ?>
</div>

2 番目のメニュー(おそらく sidebar.php ファイル内)

<div id="menu">
  <?php wp_nav_menu( array( 'theme_location' => 'second' ) ); ?>
</div>

3 番目のメニュー(おそらく footer.php ファイル内)

<div id="menu">
  <?php wp_nav_menu( array( 'theme_location' => 'third' ) ); ?>
</div>

最後のステップは、[外観] > [メニュー] に移動して 3 つのメニューを作成し、それらに名前を付けて、管理メニュー設定内からそれらと一緒に使用するページを選択することです。

于 2012-12-21T19:21:18.300 に答える