【发布时间】:2019-08-23 15:14:21
【问题描述】:
我创建了一个 PHP while 语句,它以特定布局显示来自 WordPress 的 8 个帖子。现在我想继续运行这个循环,直到显示所有帖子。所以我所做的是创建了一个名为 posts_displayed 的变量,我使用它来设置 post_offset 并在每次显示帖子时递增它。原始代码按预期工作,但是当我在它周围添加额外的 while 语句时,没有显示任何帖子。
我已经更新了代码,使得有一个主查询和循环,其中包含四个不同的查询和循环。我现在遇到的问题是在第 131 行,在那里我遇到了意外的 endwhile 错误。
<?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; ?>
【问题讨论】:
-
为什么要查询数据库这么多次?为什么不对所有帖子查询一次,然后将它们排列成您想要的布局?我认为这会使代码更具可读性。
-
@muka.gergely 如果我只查询一次,那我怎么能以某种方式显示 2 个帖子,然后以某种方式显示 3 个帖子,等等?
-
只需遍历 $the_query 变量中的数组,并按照您所见排列项目(每个项目都是 post)适合。
-
@muka.gergely 我明白了,我只是不知道如何安排它,使前两个排成一排,然后排成三排,依此类推。然后一旦8的模式完成,然后重新开始