首页 > 解决方案 > PHP如果计数,第一篇文章不进入行

问题描述

使用 WordPress,我有一个页面可以从自定义帖子类型中获取客户的徽标。

我希望徽标显示为每行 2 个,然后是 3,然后是 2,重复 2、3、2 等。

我的代码大部分都在工作,但第一张图片没有进入第一行。

<div class="container">
        <?php
        $args = array(
            'post_type'  => 'clients',
            'post_status' => 'publish',
        );
        $query = new WP_Query( $args );
        $count = 0;

        while($query -> have_posts()) : $query -> the_post();
            $client_image = get_field('client_logo');
            $size = 'full';

            if($count == 1){
                echo '<div class="row up-to-2">';
            }
            if($count == 2){
                echo '</div><div class="row up-to-3">';
            }

            if( $client_image ) { ?>
                <div class="col-md-<?php echo ($count == 1 ? 6 : 4); ?>">
                    <div class="client-logo">
                        <a class="news-post-title" href="<?php the_permalink(); ?>">
                        <?php echo wp_get_attachment_image( $client_image, $size ); ?>
                        <h4><?php the_title(); ?></h4></a>
                    </div>
                </div>

            <?php }
            $count++;
            endwhile;
            echo '</div>';
            ?>
    </div>

我试过了

if($count == 1){
    $count = 0;
    echo '<div class="row up-to-2">';
}

但是这样做会导致行循环进入行。

我正在努力更好地理解 PHP 和计数,所以解释会非常有帮助!

更新

我已经设法将第一个项目放入该行,但现在顺序是 2 1 2,而不是我想要的 2、3、2。

<div class="container">
    <?php
    $args = array(
        'post_type'  => 'clients',
        'post_status' => 'publish',
    );
    $query = new WP_Query( $args );
    $count = 0;
    echo '<div class="row up-to-2">';

    while($query -> have_posts()) : $query -> the_post();
        $client_image = get_field('client_logo');
        $size = 'full';

        if($count == 2){
            echo '</div><div class="row up-to-3">';
        }
        else if($count == 3){
            echo '</div><div class="row up-to-3">';
        }

        if( $client_image ) { ?>
            <div class="col-md-<?php echo ($count == 1 ? 6 : 4); ?>">
                <div class="client-logo">
                    <a class="news-post-title" href="<?php the_permalink(); ?>">
                        <?php echo wp_get_attachment_image( $client_image, $size ); ?>
                        <h4><?php the_title(); ?></h4></a>
                </div>
            </div>

        <?php }
        $count++;
    endwhile;
    echo '</div>';
    ?>
</div>

标签: phpwordpress

解决方案


您需要以下逻辑才能应用

 <?php

$i = 0;

echo '<div class="row up-to-2">'.PHP_EOL;

foreach( range(0,10) as $key => $value ){

    echo '$value='.$value.PHP_EOL;

    if($i == 1) {
        echo '</div>'.PHP_EOL.'<div class="row up-to-3">'.PHP_EOL;
    }

    $i ++;

    if($i == 5) {
        echo '</div>'.PHP_EOL.'<div class="row up-to-2">'.PHP_EOL;
        $i  = 0;
    }
}
echo '</div>';

输出:

<div class="row up-to-2">
$value=0
$value=1
</div>
<div class="row up-to-3">
$value=2
$value=3
$value=4
</div>
<div class="row up-to-2">
$value=5
$value=6
</div>
<div class="row up-to-3">
$value=7
$value=8
$value=9
</div>
<div class="row up-to-2">
$value=10
</div>

演示转到演示链接并点击Execute code按钮

你需要你的while循环必须像下面

<?php
$i = 0;
echo '<div class="row up-to-2">' . PHP_EOL;
while ($query->have_posts()) : $query->the_post();
    $client_image = get_field('client_logo');
    $size = 'full';

    if ($client_image) { ?>
        <div class="col-md-<?php echo($count == 1 ? 6 : 4); ?>">
            <div class="client-logo">
                <a class="news-post-title" href="<?php the_permalink(); ?>">
                    <?php echo wp_get_attachment_image($client_image, $size); ?>
                    <h4><?php the_title(); ?></h4></a>
            </div>
        </div>

    <?php }

    if ($i == 1) {
        echo '</div>' . PHP_EOL . '<div class="row up-to-3">' . PHP_EOL;
    }

    $i++;

    if ($i == 5) {
        echo '</div>' . PHP_EOL . '<div class="row up-to-2">' . PHP_EOL;
        $i = 0;
    }
endwhile;
echo '</div>';
?>

推荐阅读