[英]How to loop a while statement in PHP displaying WordPress posts?
我創建了一個PHP while語句,在特定的布局中顯示來自WordPress的8個帖子。 現在我想繼續運行這個循環,直到顯示所有帖子。 所以我所做的是創建了一個名為posts_displayed的變量,我正在使用它來設置post_offset並在每次顯示帖子時遞增它。 原始代碼按預期工作,但當我在其周圍添加額外的while語句時,不會顯示任何帖子。
我已經更新了代碼,以便有一個主查詢和循環,其中包含四個不同的查詢和循環。 我現在遇到的問題是在第131行,我得到一個意外的最終錯誤。
<?php $posts_displayed = 0; ?>
<?php
$main_query = new WP_Query( array(
'category_name' => 'Travel',
));
?>
<?php if ( $main_query->have_posts() ) : ?>
<?php while ( $posts_displayed < ($main_query->post_count) ) ?>
<?php
$first_query = new WP_Query( array(
'category_name' => 'Travel',
'posts_per_page' => 2,
'offset' => $posts_displayed,
));
?>
<div class="row row__padding--bottom homepage__row--one">
<?php if ( $first_query->have_posts() ) : ?>
<?php while ( $first_query->have_posts() ) : $first_query->the_post(); ?>
<div class="col-sm-12 col-md-6">
<div class="journal__latest" style="background: url(<?php echo get_the_post_thumbnail_url( $post_id, 'large' ); ?>) !important; background-size: cover !important; background-position: center center !important; background-repeat: no-repeat !important;">
</div>
<div class="post__info--container">
<a href="<?php echo esc_url( get_permalink()); ?>"><h4><?php the_title(); ?></h4></a>
</div>
</div>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
<?php
$second_query = new WP_Query( array(
'category_name' => 'Travel',
'posts_per_page' => 3,
'offset' => posts_displayed,
));
?>
<div class="row row__padding--bottom">
<?php if ( $second_query->have_posts() ) : ?>
<?php while ( $second_query->have_posts() ) : $second_query->the_post(); ?>
<div class="col-12 col-md-4">
<div class="portfolio__featured" style="background: url(<?php echo get_the_post_thumbnail_url( $post_id, 'large' ); ?>) !important; !important; background-size: cover !important; background-position: center center !important; background-repeat: no-repeat !important;">
</div>
<div class="post__info--container">
<a href="<?php echo esc_url( get_permalink()); ?>"><h4><?php the_title(); ?></h4></a>
</div>
</div>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
<?php
// the query
$third_query = new WP_Query( array(
'category_name' => 'Travel',
'posts_per_page' => 1,
'offset' => posts_displayed,
));
?>
<div class="row row__padding--bottom">
<?php if ( $third_query->have_posts() ) : ?>
<?php while ( $third_query->have_posts() ) : $third_query->the_post(); ?>
<div class="col-12">
<div class="journal__featured" style="background: url(<?php echo get_the_post_thumbnail_url( $post_id, 'large' ); ?>) !important; !important; background-size: cover !important; background-position: center center !important; background-repeat: no-repeat !important;">
</div>
<div class="post__info--container">
<a href="<?php echo esc_url( get_permalink()); ?>"><h4><?php the_title(); ?></h4></a>
</div>
</div>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
<?php
// the query
$fourth_query = new WP_Query( array(
'category_name' => 'Travel',
'posts_per_page' => 2,
'offset' => posts_displayed,
));
?>
<div class="row row__padding--bottom">
<?php if ( $fourth_query->have_posts() ) : ?>
<?php while ( $fourth_query->have_posts() ) : $fourth_query->the_post(); ?>
<div class="col-sm-12 col-md-6">
<div class="journal__featured" style="background: url(<?php echo get_the_post_thumbnail_url( $post_id, 'large' ); ?>) !important; !important; background-size: cover !important; background-position: center center !important; background-repeat: no-repeat !important;">
</div>
<div class="post__info--container">
<a href="<?php echo esc_url( get_permalink()); ?>"><h4><?php the_title(); ?></h4></a>
</div>
</div>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
<?php endwhile; ?>
<?php else : ?>
<p><?php __('No News'); ?></p>
<?php endif; ?>
我看到你的代碼有一些問題。 首先是你的第一個if
if ( $the_query->have_posts() )
$ the_query仍未定義,因此它沒有帖子,您將$ the_query定義為以下幾行代碼作為WP_Query類的實例。
其次你調用wp_reset_postdata()conditionaly,這意味着如果查詢沒有帖子,則不會重置數據。
當然,你正在查詢你的數據庫太多次,我不明白你為什么需要它。
我做了一些快速修正(注意下面的代碼是未經測試的,我只是應用了我能想到的快速解決方案)
<?php
$the_query = new WP_Query(
array(
'category_name' => 'Travel',
'posts_per_page' => 64,
)
);
?>
<div class="row row__padding--bottom">
<?php
if ( $the_query->have_posts() ) :
$i = 0;
$class_map = [
0 => 'col-md-6',
1 => 'col-md-6',
6 => 'col-md-6',
7 => 'col-md-6',
2 => 'col-md-4',
3 => 'col-md-4',
4 => 'col-md-4',
5 => 'col-md-12',
];
while ( $the_query->have_posts() ) :
$the_query->the_post();
?>
<div class="col-sm-12 <?php echo esc_attr( $class_map[ $i % 8 ] ); ?>">
<div class="journal__featured" style="background: url(<?php the_post_thumbnail_url( 'large' ); ?>) !important; !important; background-size: cover !important; background-position: center center !important; background-repeat: no-repeat !important;">
</div>
<div class="post__info--container">
<a href="<?php the_permalink(); ?>"><h4><?php the_title(); ?></h4></a>
</div>
</div>
<?php
if ( 1 === ($i % 8) || 4 === ($i % 8) || 5 === ($i % 8) ) {
echo '</div><div class="row row__padding--bottom">';
}
$i++;
endwhile;
else :
echo '<p>' . esc_html( __( 'No News' ) ) . '</p>';
endif;
wp_reset_postdata();
?>
</div>
<?php
希望這對你有用!
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.