在显示单个帖子的页面上,我还希望显示一些精选帖子。
特色帖子分配了一个元值,以区分特色和非特色帖子。
问题是我希望在我的页面中间显示特色帖子,但循环从顶部开始,直到页面底部才完成。
来自WP docs:
<?php
// The main query.
if (have_posts()) {
while (have_posts()) {
the_post();
the_title();
the_content();
} # End while loop
} else {
// When no posts are found, output this text.
_e( 'Sorry, no posts matched your criteria.' );
}
wp_reset_postdata();
/*
* The secondary query. Note that you can use any category name here. In our example,
* we use "example-category".
*/
$secondary_query = new WP_Query( 'category_name=example-category' );
// The second loop.
if ($secondary_query->have_posts()) {
echo '<ul>';
// While loop to add the list elements.
while ($secondary_query->have_posts()) {
$secondary_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
}
wp_reset_postdata();
?>
在第一个循环结束时,你必须调用wp_reset_postdata()
,但在我的场景中,有些数据需要在页面下方进一步检索,所以我无法在那里结束。
我基本上需要这样做但是只有特色帖子才能呈现而不是帖子本身。
if (have_posts()) {
while (have_posts()) {
the_post();
the_title();
the_content();
//Display featured posts half way through
$secondary_query = new WP_Query( 'category_name=example-category' );
//end featured post loop
wp_reset_postdata();
//continue outputting data from first loop
the_title();
} # End while loop.
} else {
// When no posts are found, output this text.
_e( 'Sorry, no posts matched your criteria.' );
}
//finally end inital loop
wp_reset_postdata();
是否可以“暂停”循环以执行不同的循环,然后在以后再次将其重新选回?
答案 0 :(得分:1)
Normaly你的第二个代码示例应该可行。您不必调用wp_reset_postdata()
来结束主循环,只需调用它来结束辅助循环。
使用此函数在使用新WP_Query的辅助查询循环之后恢复主查询循环的全局$ post变量。它将$ post变量恢复到主查询中的当前帖子。
您也可以使用 get_posts():
$secondary = get_posts( array(
'posts_per_page' => 5,
'category_name' => 'example-category',
'orderby' => 'date',
'order' => 'DESC',
'meta_key' => 'featured_posts',
'meta_value' => 'yes',
'post_type' => 'post',
'post_status' => 'publish',
) );
if ( count( $secondary ) ) {
echo '<ul>';
foreach ( $secondary as $entry ) {
// print_r( $entry ); exit;
echo '<li>' . $entry->post_title . '</li>';
}
echo '</ul>';
}