it-swarm.com.de

Verwenden Sie die Schleife, um alle Ebenen von Unterseiten unter einer übergeordneten Seite anzuzeigen? Auf halbem Wege

Ich muss die Schleife durch alle Kinder eines Elternteils, alle Kinder jedes Kindes usw. laufen lassen. Der Grund, warum ich die Schleife anstelle eines Listing-Tags wie wp_list_pages benötige, ist, dass ich alle damit verbundenen Informationen anzeigen kann mit den Seiten, die WP Template-Tags und -Funktionen verwenden. Es ist für eine Anzeige im Showcase-Stil gedacht, die hierarchischen Inhalt hat und neu angeordnet wird, also Seiten> Posts für diese Verwendung.

Ich bin so weit gekommen, dass die Schleife Kinder der aktuellen Seite und eine innere Schleife Enkelkinder zeigt, aber dies ist nur ein Brute-Force-Prototyp, und ich muss es auf die nächste Ebene bringen.

Ich denke, ich muss dazu eine Schleife verwenden, die mit post_parent beginnt (sodass untergeordnete Seiten angezeigt werden), aber eine Funktion einfügen, um die Beitrags-ID für jede gefundene untergeordnete Seite zu ändern, sodass die Schleife bis zum Ende des Drilldowns fortgesetzt wird. setzt dann 1 Ebene zurück, geht zur nächsten verfügbaren ID usw.

Mein Problem ist, dass ich nicht genug von einem WP Programmierer (oder überhaupt einem echten Programmierer) bin, um das in Gang zu bringen. Wenn alles im Code wäre, könnte ich es sicher herausfinden, aber WP hat offensichtlich versteckte Funktionen, um mit have_post und the_post durch die verfügbaren Post-IDs zu blättern integrieren was ich brauche.

Hier bin ich gerade. Jede Hilfe wird sehr geschätzt!

<?php   
$args = array(
'posts_per_page' => -1,
'post_parent' => $post->ID,
'post_type' => 'page',
'post_status' => '',
'orderby' => 'title',
'order' => 'ASC',);

query_posts($args); ?>

<?php if(have_posts()) : while (have_posts()) : the_post(); ?>

<a href="<?php the_permalink();?>"><?php the_title();?>:</a>

<?php     $inner_query = new WP_Query("post_type=page&posts_per_page=-1&post_parent={$id}&order_by=title&order=ASC"); ?>

<?php while ($inner_query->have_posts()) : $inner_query->the_post(); ?>

<a href="<?php the_permalink();?>"><?php the_title();?>:</a>

<?php endwhile; // end inner loop ?>
<?php endwhile; //end outer loop ?>     
<?php endif; // end outer if have_posts?>
4
dains

Klingt so, als ob Sie nach einer rekursiven Funktion suchen, dh einer Funktion, die sich selbst aufruft. Hier ist eine grobe Übersicht, wie es gemacht werden kann:

function wpse13669_show_all_children( $post_id, $current_level ) {
    $children = get_posts( array(
        'post_type' =>'page',
        'posts_per_page' =>-1,
        'post_parent' => $post_id,
        'order_by' => 'title',
        'order' => 'ASC' ) );
    if ( empty($children) ) return;

    echo '<ul class="children level-'.$current_level.'-children">';

    foreach ($children as $child) {

        /* Here would be the point where you
            do whatever you want to display the 
            posts. The variable $current_level can
            be used if you want to style different 
            levels in the hierarchy differently */

            echo '<li>';

        echo '<a href="'.get_permalink($child->ID).'">';
        echo apply_filters( 'the_title', $child->post_title );
        echo '</a>';

        // now call the same function for child of this child
        wpse13669_show_all_children( $child->ID, $current_level+1 );

            echo '</li>';

        }

    echo '</ul>';

    }

Hinweis: Mein Code wurde bearbeitet, um die Art der verschachtelten <ul>-Listen anzuzeigen, nach denen Sie suchen. Wenn Sie sehen möchten, wie WordPress solche Dinge intern ausführt (es ist viel komplizierter als dies, aber es lohnt sich herauszufinden, ob Sie etwas wirklich Angepasstes in Ihrem Code tun müssen), sollten Sie den Quellcode nach durchsuchen. class-wp-walker.php Datei, in der die Walker-Klasse alle verschachtelten Listen (Menüs, Kommentare, Seitenlisten usw.) im gesamten WP verarbeitet.

Wenn Sie diese Funktion mit der gewünschten Ausgabestruktur definieren und sie nur in Ihrer Schleife aufrufen, sollte sie das tun, wonach Sie suchen. Ich habe dort eine Variable $ current_level eingefügt, damit Sie Kinder, die sich von Enkelkindern unterscheiden, leicht formatieren können, und so weiter.

(innerhalb Ihrer Hauptschleife)

wpse13669_show_all_children( $post->ID, 1 );
7
goldenapples