web-dev-qa-db-ja.com

アクティブなナビゲーションに応じて第2レベルのナビゲーションのみを表示

たとえば、次のようなメニューがあるとします。

Parent 1
  Child A
  Child B
Parent 1
  Child C
  Child D
  Child E
Parent 2
  Child F

私のテンプレートのある部分では、メニューの現在の "位置"に応じて何かを表示したいです。ユーザーがParent 1Child CChild D、またはChild Eページにいる場合は、ヘッダーにParent 1を、リンクに子を表示する小さなメニューを表示します。いろいろなことを試してみました(カスタムのwalkerオブジェクトを作成する、表示してはいけない項目を表示しないようにcssを書くなど)。また、まったく子供がいない場合は表示したくない親自身のページでも親。これは意味がありますか?

私はこれをする/助けるプラグインが欲しくありません(私のテンプレートをプラグインに「依存させる」のは好きではありません)

4
Matthew

これを試してください - 私はそれを完全には実装していませんが、私はそれをテストしました、そしてそれはうまくいくようです。それをあなたのfunctions.phpに置いて、あなたのテンプレートで<?php list_child_pages(); ?>を呼び出すか、エディタでショートコード[childpages]を使ってください。

<?php
// List Child pages of a parent. 
function list_child_pages() {

global $post;

if ( is_page() && $post->post_parent )
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
else
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );

if ( $childpages ) { ?>
    <menu>
        <ul class="side-nav">
            <?php echo $string = $childpages; ?>
        </ul>
    </menu>
<?php   
}

return $string;

}
// Add Shortcode for additional support, not just in the theme template
add_shortcode('childpages', 'list_child_pages');

?>
1
Greg McMullen