当前位置: 首页 > 知识库问答 >
问题:

PHP交替成对循环

鞠晋
2023-03-14

情境:在我的WordPress网站上,我在我的归档PHP模板上输出帖子,我想在第一篇帖子之后,每隔一对就分配一个CSS类“slim”,让其余的得到类“wide”。此外,我想让最后一篇文章得到一个“完整”的类。

问题:我无法编写代码,因此我可以为每一对分配“slim”类。

下面是布局的快速绘图

我当前的代码在大部分情况下有效,只是不确定如何将类分配给这些对。以下是我目前的代码:

    <section id="primary" class="content-area">
    <main id="main" class="site-main">

    <?php if ( have_posts() ) : ?>

        <header class="page-header">
            <?php the_archive_title( '<h1 class="page-title">', '</h1>' ); ?>
        </header><!-- .page-header -->

        <?php
        // Start the Loop counter:
        $client_post_index = 0;
        while ( have_posts() ) : ?>

            <?php the_post(); ?>


            <?php 
            // check if a new row is needed.
            if ( $client_post_index % 2 == 0 ) : ?>
                <div class="work-archive-row">
            <?php endif ?>
                <?php 
                // check if the entry is odd or even and assign wide or slim class.
                if ( $client_post_index % 3 == 0 ) : ?>
                    <div id="post-<?php the_ID(); ?>" class='work-archive-post-wide'>
                        <?php twentynineteen_post_thumbnail(); ?>
                    </div>

                <?php else: ?>
                    <div id="post-<?php the_ID(); ?>" class='work-archive-post-slim'>
                        <?php twentynineteen_post_thumbnail(); ?>
                    </div>

                <?php endif ?> 




                <?php $client_post_index++; ?>
                <?php if ( $client_post_index % 2 == 0 ) : ?>
                    </div>
                <?php endif ?>


        <?php  endwhile;

        // Previous/next page navigation.
        twentynineteen_the_posts_navigation();

        // If no content, include the "No posts found" template.
    else :
        get_template_part( 'template-parts/content/content', 'none' );

    endif;
    ?>
    </main><!-- #main -->
</section><!-- #primary -->

使用的CSS如下所示:

.work-archive-row {
height: 500px;
margin: 16px calc(5% + 60px) 8px calc(5% + 60px); }

.work-archive-row .work-archive-post-odd {
max-width: calc( 65% - 16px);
width: 100%;
margin: 0 8px;
float: left;
height: 500px;}

.work-archive-row .work-archive-post-even {
width: calc( 35% - 16px);
float: left;
height: 500px;
margin: 0 8px;}

.work-archive-row .work-archive-post-odd img {
height: 500px;
object-fit: cover;}

.work-archive-row .work-archive-post-even img {
height: 500px;
object-fit: cover;}

更新:另一个例子——假设我的归档循环吐出10个帖子,那么我需要这些帖子被分配如下类:

  • 01后:宽
  • 02后:苗条
  • 03年后:苗条
  • 04年后:广泛
  • 05后:宽
  • 06年后:苗条
  • 07年后:苗条
  • 08年后:宽
  • 09年后:宽
  • 邮政10:全部

正如您从附加的图像中看到的,每一行只包含两个条目,但我需要更改大小(CSS类)。

任何指向该类型循环迭代的指针或引用都将非常受欢迎。提前谢谢你。

共有2个答案

司空宗清
2023-03-14

你想要

1. row: wide/slim
2. row: slim/wide
3. row: wide/slim
etc.

=

所以只需引入另一个随每行递增的变量。如果你在偶数行或奇数行,检查每一篇文章,并相应地设置css类。

晋弘义
2023-03-14

您使用%3==0作为测试,这不是您测试奇数和偶数的方式,如果值为2,那么结果将是2,而不是0或1。

您需要使用%2==0

// check if the entry is odd or even and assign wide or slim class.
if ( $client_post_index % 2 == 0 ) : ?>

一种简单的交替方法是有一个状态数组,并使用索引%4作为索引,所以替换...

        <?php 
        // check if the entry is odd or even and assign wide or slim class.
        if ( $client_post_index % 3 == 0 ) : ?>
            <div id="post-<?php the_ID(); ?>" class='work-archive-post-wide'>
                <?php twentynineteen_post_thumbnail(); ?>
            </div>

        <?php else: ?>
            <div id="post-<?php the_ID(); ?>" class='work-archive-post-slim'>
                <?php twentynineteen_post_thumbnail(); ?>
            </div>

        <?php endif ?> 

<?php $state = ['wide', 'slim', 'slim', 'wide']; ?>
<div id="post-<?php the_ID(); ?>" class='work-archive-post-<?php echo $state[$client_post_index % 4]; ?>'>
    <?php twentynineteen_post_thumbnail(); ?>
</div>
 类似资料:
  • Java 如何实现用 POI 输出 Excel 的时候,设置背景 n 行有色,n 行无色,按顺序循环下去,怎么搞呢?

  • 我试图实现这一点:第一个线程打印1,第二个线程打印2,第三个线程打印3,第一个线程打印4等等: 我做到了这一点,并发挥了作用: 输出是这样的: 它达到了目的,但是如果我有两个线程要打印,那么我必须使用更多的如果条件。 任何人都可以建议以更好的形式编写这段代码,以更干净的方式完成任务,这样如果添加更多线程,它就可以扩展。

  • 我试图迭代一个分成块的切片,并返回一个元组,其中包含每个块的第n个元素。 示例:

  • 问题 你想通过数据集合动态的生成交替背景色的列表. 方案 Give templetor access to the int built-in and use modulo to test. code.py web.template.Template.globals['int'] = int template.html <ul> $var i: 0 $for track in tracks:

  • 问题内容: 在Java中,如何获得具有交替颜色的A?任何示例代码? 问题答案: 要自定义单元格的外观,您需要编写自己的实现。 的示例实现可能如下所示:(草绘,未经测试) 要使用此渲染器,请在您的构造函数中添加以下代码: 要基于所选对象并具有焦点来更改单元格的行为,请使用提供的布尔值。

  • 主要内容:for 循环,实例,foreach 循环,实例,实例循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。 for 循环 for 循环用于您预先知道脚本需要运行的次数的情况。 语法 参数: 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)。 条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。 增量:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)