首页 > 解决方案 > 如何使用多个样式 div 循环 php

问题描述

我正在研究一个 WP 主题并偶然发现了一项我无法在此处描述的特定任务,但我确信如果我在这里显示一些屏幕截图,那么您就可以理解这个问题。

首先请看下图的帖子div结构

在此处输入图像描述

这是 HTML 的实际设计,特别是 a 中的前 2 个帖子div和另一个中的第三个帖子,div如下面的屏幕截图

在此处输入图像描述

如果您不能理解这一点,请发表评论。

问题是如何通过保持相同的结构和设计来动态循环?

下面是我的代码

<div class="row justify-content-center">
    <div class="col-xl-3 col-lg-6 col-md-6">
        <?php
        while($projects_array->have_posts()):
            $projects_array->the_post();

            $idd = get_the_ID();
            $terms = wp_get_post_terms(get_the_ID(), 'project_cat');

            $output = array();
            if ($terms) {
                $i = 1;
                foreach ($terms as $term) {
                    if($i == 1):
                        $output[] = '<span class="tag-'.$i.'">'.$term->name.'</span>';
                        $id[] = $term->term_id ;
                    endif;
                    $i++;
                }
            }

            if ( class_exists('ACF') && get_field('choose_link_type') == 1 ) {
                $post_link = get_the_permalink();
            } else {
                $post_link = get_field('external_link');
            }
            ?>
                <div class="single-portfolio-box">
                    <?php if(has_post_thumbnail()): ?>
                        <img src="<?php the_post_thumbnail_url(); ?>" alt="<?php the_post_thumbnail_caption(); ?>">
                    <?php endif; ?>
                    <div class="content">
                        <h3><a href="<?php echo esc_url( $post_link ); ?>"><?php the_title(); ?></a></h3>
                        <?php echo join( ' ', $output ); ?>
                    </div>
                </div>
        <?php endwhile; ?>
        <?php wp_reset_query(); ?>
    </div>
</div>

提前致谢。

标签: phphtmlwordpress

解决方案


您可以在三种不同的情况下创建索引并执行输出,如下所示:

$index = 1;
while ($projects_array->have_posts()) {
    $modulo3 = $index % 3;
    //Initialize your values
    if (($modulo3 === 1) || ($modulo3 === 0)) {
        //Display the wrapper div's start
    }
    //Display the actual post content
    if (($modulo3 % 3 === 2) || ($modulo3 === 0)) {
        //Display the wrapper div's end
    }
    $index++;
}
if ($index % 3 === 2) {
    //Display the wrapper div's end
}

我没有深入研究你的结构,因为你比我更清楚。但是,这个想法是,如果您有一个表示当前状态的数值,那么您就知道需要显示包装器的哪一部分。每个循环 3 次迭代包括:

  • 第 1 步:显示包装器的开始和帖子
  • 第 2 步:显示帖子和包装器的结尾
  • 第 3 步:显示包装器的开始、帖子和包装器的结束

到目前为止,一切都很好。如果迭代次数是 3 的倍数,那么您将在每个步骤中将两个帖子包装到一个包装器中,将第三个帖子包装到一个包装器中。但是,如果帖子的数量不是三的倍数,那么您将需要处理最后一组三人中的特殊情况。如果要显示的帖子数是 3n + 2,其中 n 是自然数,那么您的最后一组将由两个帖子组成,它们将由循环内的包装器很好地包装。但是,如果要显示的帖子数是 3n + 1,其中 n 是自然数,那么在最后一步您打开包装器并显示帖子。在这种情况下,您需要在循环之后关闭包装器。


推荐阅读