Используя цикл WordPress со страницами вместо постов?

#php #wordpress

Вопрос:

Есть ли способ использовать ЦИКЛ в WordPress для загрузки страниц вместо сообщений?

Я хотел бы иметь возможность запрашивать набор дочерних страниц, а затем использовать вызовы функций ЦИКЛА на нем — такие вещи, как the_permalink() и the_title() .

Есть ли способ сделать это? Я ничего не видел в query_posts() документации.

Ответ №1:

Да, это возможно. Вы можете создать новый объект WP_Query. Сделайте что-нибудь вроде этого:

 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
 

Дополнение: Существует множество других параметров, которые можно использовать с query_posts. Некоторые, но, к сожалению, не все, перечислены здесь: http://codex.wordpress.org/Template_Tags/query_posts. По крайней post_parent мере, и более важные post_type там не перечислены. Я покопался в источниках ./wp-include/query.php , чтобы узнать об этом.

Комментарии:

1. Если это дочерние страницы текущей страницы, которые вы можете использовать get_the_ID() , если вы уже звонили ранее the_post() .

Ответ №2:

Учитывая возраст этого вопроса, я хотел дать обновленный ответ любому, кто на него наткнется.

Я бы посоветовал избегать query_posts. Вот альтернатива, которую я предпочитаю:

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

Другой альтернативой было бы использовать фильтр pre_get_posts, однако это применимо только в этом случае, если вам нужно изменить основной цикл. Приведенный выше пример лучше использовать в качестве вторичного цикла.

Дальнейшее чтение: http://codex.wordpress.org/Class_Reference/WP_Query