web-dev-qa-db-ja.com

現在のページにのみ表示される子を含むナビゲーションメニュー

私は私のサイトのためのメニューを構築するためにWordpressのメニュー機能(wp_nav_menuとwp_list_pages)で遊んでいました。それは一緒に来ています、しかし、私はまだ私が望む行動を得ることにいくらかの問題を抱えています。

私が欲しいのはこのウェブサイトのサイドバーメニューのようなものです(WPではありません): http://www.fairfood.org/facts/sustainability-agenda/ /

あなたが子供を持つサブページをクリックすると、メニューはそれらの子供を表示します。 http://www.fairfood.org/facts/production-chains/

私は現在このコードを持っています:

            <?php // sidebar menu
        if ($post->post_parent) {
            $ancestors=get_post_ancestors($post->ID);
            $root=count($ancestors)-1;
            $parent = $ancestors[$root];
        } else {
            $parent = $post->ID;
        }

        $children = wp_list_pages("title_li=&child_of=". $parent ."&echo=0");

        if ($children) { ?>
        <ul id="subnav">
        <?php echo $children; ?>
        </ul>
        <?php } ?>

これは機能しますが、これは現在のページの子だけでなく、すべてのサブページが持つ子を示しています。私の言っていることの例: http://test.fairfood.org/facts/ /

この作品を作るためのアイデアはありますか?

3
user3201

もしあなたがプラグインを使用しても構わないのなら、私はこれを過去に機能させる方法を教えてください。

  1. Functions.php に以下のコードを追加してください。
    function get_root_parent($ page_id){
     global $ wpdb; 
     $ parent = $ wpdb-> get_var( "$ wpdb->投稿からSELECT投稿先を選択します。WHERE post_type = 'ページ' AND ID = '$ page_id '"); 
     if($ parent == 0)return $ page_id; 
    そうでない場合get_root_parent($ parent); 
    } 
    
  2. Phpラッパーのhead。からbody。の間のheader.phpに以下を追加してください。
     <?php 
     $ GLOBALS ["parentId"] = get_root_parent($ post-> ID); 
    ?> 
    
  3. フォールドページプラグインをダウンロードしてインストールします。 http://www.webspaceworks.com/resources/wordpress/30/ /

  4. Sidebar.phpに次のコードを追加してください。
     <ul> 
     <?php 
     $ thispage = $ wp_query-> post; 
     if($ thispage-> post_parent!= 0){
     wswwpx_fold_page_list( "sort_column = menu_order&child_of ="。$ GLOBALS ["parentId"]。 "&title_li =&amp; child_of ="。$ thispage-> post_parent); 
    } else {
     wswwpx_fold_page_list( " "sort_column = menu_order&child_of ="。$ GLOBALS ["parentId"]。 "&title_li =&amp; child_of ="。$ thispage-> ID); 
    }?> 
     </ul> 
    
0
PNMG