it-swarm.com.de

Erstellen einer Liste, in der die Unterseiten der obersten Ebene und alle Unterseiten oder Geschwister der aktuellen Seite angezeigt werden

Nehmen wir an, wir zeigen ein paar Stammbäume. Wir befinden uns derzeit auf der Startseite des Stammbaums und benötigen unsere Liste, um wie folgt auszusehen:

Stammbäume

  • Schmiede
  • Die Joneses
  • Das macht

Wenn der Benutzer auf die Smiths klickt, soll die Liste folgendermaßen aussehen:

The Smiths

  • Schmiede
    • Dave
    • Steve
    • Transportwagen
  • Die Joneses
  • Das macht

Und wenn ein Benutzer auf Steve klickt, soll die Liste auch so aussehen:

Dave Smith

  • Schmiede
    • Dave
    • Steve
    • Transportwagen
  • Die Joneses
  • Das macht

Daher müssen wir eine Liste aller Unterseiten und Geschwister der aktuellen Seite sowie aller Geschwister jedes Schritts in der Hierarchie anzeigen.

Irgendwelche Ideen?

2

Was du schreibst, hat mich an ein Plugin/Widget erinnert, von dem ich weiß. Es ist verwandt mit Silo Web Design und das Plugin ist das Silo Widgets Plugin für WordPress . In SemPro können Sie Inline-Widgets verwenden, um so etwas in Beiträgen anzuzeigen.

1
hakre

Dies war ein ziemlich anständiges Plugin zum Anzeigen einer flexiblen Liste von Seiten, als ich es das letzte Mal ausprobiert habe (ich brauche es nicht selbst).

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

Wenn überhaupt, sollten Sie in der Lage sein, in diesem Plugin nach Ideen und Anregungen zu suchen, wie Sie es angehen können.

0
t31os

Das musste ich eigentlich einmal machen. Sie können es ohne Plugin und ohne Javascript tun. Möglicherweise müssen Sie es ein wenig optimieren, um genau so zu arbeiten, wie Sie es benötigen, aber es sollte Ihnen die richtige Idee geben. Anzeigen von übergeordneten Seiten und deren Kindern usw.

Hier ist das Tutorial, das ich verwendet habe: http://www.svennerberg.com/2009/02/creating-a-submenu-in-wordpress/

0
eileencodes

Vergessen Sie Plugins, ich hatte das gleiche Problem und Plugins verursachten eine ganze Menge Chaos und zu viele DB-Aufrufe.

Dieser Code erledigt das Geschäft für Sie - zur Vereinfachung der Verwendung kleben Sie ihn in einen Inhaltsteil und fügen Sie ihn wie folgt ein:

get_template_part( 'subnav', 'pagename' );

Das Problem ist, Sie kennen Ihre Kinder bereits und Sie kennen Ihre Eltern. Ich habe versucht, die Funktion "wp-list-pages" zu verwenden, wobei "echo" auf "false" gesetzt war und "id's" beinhaltete. Diese Lösung ist nicht perfekt, aber viel sauberer als ein oder zwei Plugins.

Kurz gesagt: Sie möchten die absolute Top-Eltern-ID und anschließend alle Kinder der Vorfahren des aktuellen Posts erhalten:

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);

Dieser Code fügt auch die Klasse 'selected' zum aktuellen Beitrag und 'parent' zum aktuellen Beitragselternteil in der Liste hinzu.

Hoffe das hilft jemandem!

0
Beans