1

サイト内の現在の場所に基づいて変化するサイドバー ナビゲーション メニューを作成しようとしています。

ナビゲーション全体は次のようになります。

  • 私たちに関しては
    • レベル 1a
    • レベル 1b
    • レベル 1c
  • プログラム
    • レベル 1d
      • レベル 2a
      • レベル 2b
    • レベル 1e
      • レベル 2c
      • レベル 2d
    • レベル 1f
  • お問い合わせ

現在、カスタム ナビゲーション メニューを使用してホームページのメニューを作成しているため、管理パネルのメニュー リンクからカスタム メニューを編集できます。彼らは連絡先ページにサイドバーのナビゲーション メニューを望んでいません。

私たちについてのページでは、サイドバーのナビゲーションを次のようにしたいと考えています。

  • レベル 1a
  • レベル 1b
  • レベル 1c

プログラムページでは、次のように表示したいと考えています。

  • レベル 1d
  • レベル 1e
  • レベル 1f

レベル 1d ページでは、次のように表示する必要があります。

  • レベル 1d
    • レベル 2a
    • レベル 2b
  • レベル 1e
  • レベル 1f

子ページが現在の親に対してのみ表示されるようにします。

レベル 2a のページでは、レベル 1d のページと同じように表示する必要があります。

  • レベル 1d
    • レベル 2a
    • レベル 2b
  • レベル 1e
  • レベル 1f

また、注意すべき重要なことは、現在のページのリスト項目を残りの項目とは異なるスタイルにする必要があることです。そのため、そのリスト項目ごとにある種の現在のページ項目クラスを追加する必要があります。時間。

これまでのところ、レベル 1d では現在の親の子のみを印刷できませんでした。wp_list_pages を使用すると、深さを設定できますが、現在の親だけに制限することはできません。すべての兄弟の子も出力します (つまり、レベル 1d の場合、現在アクティブな親の下にあるレベル 2 の子だけではなく、それぞれの親の下にあるすべてのレベル 2 の子を出力します)。

どうすればいいですか?

    <?php $current_section = "";
        if(is_front_page()):
             $current_section = "home";
             $nav_args = array(
                 'theme_location' => $current_section,
                  'container' => 'nav',
                  'container_class' => 'side-nav'
             );
             wp_nav_menu( $nav_args );
        else:

        endif;?>

これは私が現時点で持っているものです。とにかく動作していなかったので、else ブロック内のすべてのコードを削除しました。

4

2 に答える 2

0

これが私が思いついたコードです:

    <?php
            $children = wp_list_pages('depth=1&title_li=&child_of='.$post->ID.'&echo=0');
            $current_page = wp_list_pages('title_li=&include='.$post->ID.'&echo=0');
            $grandparent=0;
            if($post->post_parent):
                $parent = wp_list_pages('title_li=&include='.$post->post_parent.'&echo=0');
                $siblings = wp_list_pages('depth=1&title_li=&child_of='.$post->post_parent.'&exclude='.$post->ID.'&echo=0');
                $parent_children = wp_list_pages('depth=1&title_li=&child_of='.$post->post_parent.'&echo=0');
                $parent_post = get_post($post->post_parent);
                $grandparent = $parent_post->post_parent;
                $parent_siblings = wp_list_pages('depth=1&title_li=&child_of='.$grandparent.'&echo=0&exclude='.$post->post_parent);
            endif;
            if(!$post->post_parent && $children):?>
                <ul class="menu">
                    <?php echo $children;?>
                </ul>
            <?php elseif($post->post_parent && $children):?>
                <ul class="menu">
                    <?php echo $current_page;?>
                    <ul class="menu">
                        <?php echo $children;?>
                    </ul>
                    <?php echo $siblings;?>
                </ul>
            <?php elseif($grandparent && $post->post_parent && !$children):?>
                <ul class="menu">
                    <?php echo $parent;?>
                    <ul class="menu">
                    <?php echo $parent_children;?>
                    </ul>
                    <?php echo $parent_siblings;?>
                </ul>
            <?php elseif(!$grandparent && $post->post_parent && !$children):?>
                <ul class="menu">
                    <?php echo $parent_children;?>
                </ul>
            <?php endif;?>

これはこれまでで最も洗練されたソリューションではありませんが、少なくとも私が求めたことを実行します。これの実際の機能を改善する唯一のことは、サブメニューを許可しながらメニュー項目の順序を維持することです。このコードは、サブメニューのあるメニュー項目を削除し、それを一番上に移動します。私はこれを行う他の方法を理解できませんでした。

于 2012-08-20T14:27:40.127 に答える
0

現在の親とそのサブメニューのみを表示するには、以下のコードを試してください

<?php
  if($post->post_parent) {
  $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
  $titlenamer = get_the_title($post->post_parent);
  }

  else {
  $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
  $titlenamer = get_the_title($post->ID);
  }
  if ($children) { ?>

  <h2> <?php echo $titlenamer; ?> </h2>
  <ul>
  <?php echo $children; ?>
  </ul>

<?php } ?>

コーデックスのこのセクションでは、これについて説明します

また、注意すべき重要なことは、現在のページのリスト項目を残りの項目とは異なるスタイルにする必要があることです。そのため、そのリスト項目ごとにある種の現在のページ項目クラスを追加する必要があります。時間。

毎回特別なクラスを書く必要はありません。WordPress は自動的にクラスを追加し.current-menu-itemます。そのクラスを CSS からカスタマイズするだけです。

これがあなたの問題のいくつかを解決することを願っています.. :)

于 2012-08-17T16:59:27.223 に答える