it-swarm.dev

Jak vytvořit seznam zobrazující podstránky nejvyšší úrovně a všechny podstránky nebo sourozence z aktuální stránky

Řekněme, že zobrazujeme několik rodinných stromů. V současné době se nacházíme na hlavní stránce rodokmenu a náš seznam potřebujeme, aby vypadal takto:

Rodiny

  • The Smiths
  • Joneses
  • The Does

Když uživatel klikne na Smiths, chceme, aby seznam vypadal takto:

The Smiths

  • Kováři
    • Dave
    • Steve
    • Dolly
  • Joneses
  • The Does

A když uživatel klikne na Steva, chceme, aby seznam vypadal takto:

Dave Smith

  • Kováři
    • Dave
    • Steve
    • Dolly
  • Joneses
  • The Does

Musíme tedy zobrazit seznam všech podstránek a sourozenců aktuální stránky, jakož i všech sourozenců každého kroku v hierarchii.

Nějaké nápady?

2
Joseph Carrington

To, co píšete, mi připomnělo nějaký plugin/widget, o kterém vím. Je to spojeno s Silo Web Design a plugin je Silo Widgets Plugin pro WordPress . V SemPro můžete využít in-line widgety k zobrazení něčeho takového v rámci příspěvků.

1
hakre

To byl docela slušný plugin pro zobrazování flexibilní seznam stránek naposledy, co jsem to zkusil (není třeba to sám).

http://wordpress.org/extend/plugins/flexi-pages-widget/

Pokud něco, měli byste být schopni podívat se na tento plugin pro některé nápady a inspiraci, jak se s ním vypořádat.

0
t31os

Vlastně jsem to musel udělat jednou. Můžete to udělat bez pluginu a bez JavaScriptu. Možná budete muset trochu vylepšit, abyste pracovali přesně tak, jak potřebujete, ale měla by vám dát správnou představu; zobrazování rodičovských stránek a jejich dětí atd.

Zde je návod, který jsem použil: http://www.svennerberg.com/2009/02/creating-a-submenu-in-wordpress/

0
eileencodes

Zapomeňte na pluginy, měl jsem stejný problém a pluginy vytvořily celou řadu nepořádků a příliš mnoho db volání.

Tento kód pro vás udělá obchod - pro snadné používání ho nalepte do obsahové části a zahrňte jej tak:

get_template_part( 'subnav', 'pagename' );

Problém je, že už znáte své děti a znáte své rodiče. Snažil jsem se použít funkci wp-list-pages, s echou nastavenou na false a včetně id, ale to bylo trochu chaotický. Toto řešení není dokonalé, ale je mnohem čistší než použití pluginu nebo dvou.

Stručně řečeno - chcete absolutní nejvyšší rodičovské ID, pak chcete získat všechny děti ze současných předků příspěvků:

function get_top_id($id){
   $parents = get_post_ancestors( $post );
   return $parents[count($parents)-1]; 
}


function get_sub_pages($id){

    global $post;

    // get the ancestors for this depth
    $parents = get_post_ancestors( $post );

    //add the post id to the list in order to get the children
    array_unshift($parents, $post->ID);

    //reverse the order of the array
    $parents = array_reverse($parents);

    // specify to get all children of the top level parent
    $args = array( 'child_of' => $id); 

    if($subPages = get_pages($args)):

        // start at the first  $parents array key
       $curParent = 0;
       $childList = '<ul>';

       if($id == $post->ID) $class = ' class="selected"';
       $childList .= "<li" . $class ."><a href='". get_page_link( $id )."'>Introduction</a></li>" ;

       foreach( $subPages as $page ) :

            // only add the item if:
            // a: the pages parent is in the ancestors array

            if(in_array($page->post_parent, $parents)){ 

                // get the key of the page parent within the $parents array 
                // this helps us check if we are going to a deeper/higher level
                $pageParent = array_search($page->post_parent, $parents);

                if($curParent != $pageParent){

                    // if we are going deeper, add a new list for the children
                    if($pageParent > $curParent){
                        $childList .= '<ul>';
                    }

                    // if we are going higher, check how many depth changes                        
                    if($pageParent < $curParent){                            
                        $depthChange = $curParent - $pageParent;

                        // close off all the children of higher depths
                        while($depthChange > 0){
                            $childList .= '</li></ul>';
                            $depthChange --;
                        }                            
                    }

                    // set the new parent level
                    $curParent = $pageParent;                        
                }

                $class = '';
                if($page->ID == $post->ID) $class = ' class="selected"';
                if($page->ID == $post->post_parent) $class = ' class="parent"';

                // leave off the trailing <li> in case there are children to be added to this
                $childList .= "<li" . $class . "><a href='". get_page_link( $page->ID )."'>". $page->post_title . "</a>" ;

            }

       endforeach;

       $childList .= '</ul>';

    endif;

    return $childList;
}

// get the absolute top level parent of this page
$topID = get_top_id();

// if no parent, we are ar the top
if(!$topID) $topID = $post->ID;

echo get_sub_pages($topID);

Tento kód také přidá třídu 'vybrané' do aktuálního příspěvku a 'nadřazený' aktuálnímu nadřízenému příspěvku v seznamu.

Doufám, že to někomu pomůže!

0
Beans