gpt4 book ai didi

php - 如何在显示 WordPress 帖子的 PHP 中循环 while 语句?

转载 作者:搜寻专家 更新时间:2023-10-31 21:19:26 25 4
gpt4 key购买 nike

我创建了一个 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; ?>

最佳答案

我发现您的代码存在一些问题。首先在你的第一个 if

if ( $the_query->have_posts() )

$the_query 仍未定义,因此它没有帖子,您在下面的几行代码中将 $the_query 定义为 WP_Query 类的实例。

其次,您有条件地调用 wp_reset_postdata(),这意味着如果查询没有帖子,则不会重置帖子数据。

当然,您查询数据库的次数太多了,我不明白您为什么需要它。

我做了一些快速更正(注意下面的代码未经测试,我只是应用了我能想到的快速解决方案)

<?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

希望对你有用!

干杯!

关于php - 如何在显示 WordPress 帖子的 PHP 中循环 while 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57628997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com