为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
红颜莎娜 2021-12-03 16:22:42
我创建了一个 PHP while 语句,它以特定布局显示来自 WordPress 的 8 个帖子。现在我想继续运行这个循环,直到显示所有帖子。所以我所做的是创建一个名为posts_displayed 的变量,我使用它来设置post_offset 并在每次显示帖子时增加它。原始代码按预期工作,但是当我在它周围添加额外的 while 语句时,没有显示任何帖子。我已经更新了代码,以便有一个主查询和循环,其中包含四个不同的查询和循环。我现在遇到的问题是在第 131 行,在那里我遇到了意外的结束时错误。
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我看到您的代码有一些问题。首先在你的第一个如果


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

希望这对你有用!


查看完整回答
反对 回复 2021-12-03
  • 1 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信