2008-10-13 5 views
30

Gibt es eine Möglichkeit, THE LOOP in Wordpress zu verwenden, um Seiten statt Posts zu laden?Verwenden von Wordpress LOOP mit Seiten statt Posts?

Ich möchte in der Lage sein, eine Reihe von untergeordneten Seiten abzufragen und dann THE LOOP Gebrauch der Funktion nennt - Dinge wie the_permalink() und the_title().

Gibt es eine Möglichkeit, dies zu tun? Ich habe nichts in query_posts() Dokumentation gesehen.

Antwort

55

Ja, das ist möglich. Sie können ein neues WP_Query-Objekt erstellen. Tun Sie etwas wie folgt aus:

query_posts(array('showposts' => <number_of_pages_to_show>, 'post_parent' => <ID of the parent page>, 'post_type' => 'page')); 

while (have_posts()) { the_post(); 
    /* Do whatever you want to do for every page... */ 
} 

wp_reset_query(); // Restore global post data 

Zusatz: Es gibt eine Menge anderer Parameter, die mit query_posts verwendet werden kann. Einige, aber leider nicht alle, sind hier aufgelistet: http://codex.wordpress.org/Template_Tags/query_posts. Mindestens post_parent und wichtiger post_type sind dort nicht aufgeführt. Ich habe durch die Quellen von ./wp-include/query.php gegraben, um über diese herauszufinden.

+0

Wenn es geordneten Seiten der aktuellen Seite ist können Sie 'get_the_ID()', wenn Sie zuvor schon genannt 'the_post()'. – jezmck

15

Angesichts des Alters dieser Frage wollte ich eine aktualisierte Antwort für jeden, der darüber stolpert.

Ich würde vorschlagen, query_posts zu vermeiden. Hier ist die Alternative, die ich lieber:

$child_pages = new WP_Query(array(
    'post_type'  => 'page', // set the post type to page 
    'posts_per_page' => 10, // number of posts (pages) to show 
    'post_parent' => <ID of the parent page>, // enter the post ID of the parent page 
    'no_found_rows' => true, // no pagination necessary so improve efficiency of loop 
)); 

if ($child_pages->have_posts()) : while ($child_pages->have_posts()) : $child_pages->the_post(); 
    // Do whatever you want to do for every page. the_title(), the_permalink(), etc... 
endwhile; endif; 

wp_reset_postdata(); 

Eine weitere Alternative wäre, die pre_get_posts Filter verwenden, aber dies nur in diesem Fall gilt, wenn Sie die primäre Schleife ändern müssen. Das obige Beispiel ist besser, wenn es als Sekundärschleife verwendet wird.

Weiterführende Literatur: http://codex.wordpress.org/Class_Reference/WP_Query

Verwandte Themen