首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要将每4篇wordpress文章包装在div中

我需要将每4篇wordpress文章包装在div中
EN

Stack Overflow用户
提问于 2013-10-28 16:31:16
回答 2查看 2.2K关注 0票数 1

我需要一个div包每四个帖子在wordpress循环。所以就像

代码语言:javascript
复制
<div>
four posts
</div>
<div>
four posts
</div>

我现在的代码是

代码语言:javascript
复制
<?php 
        $i = 0;
        $wrap_div = "<div class='frak'>";
            if ( have_posts() ) {
               echo $wrap_div;
                while ( have_posts() ) {
                    the_post();

        ?>

        <div class="wine-section">
            <?php the_post_thumbnail(); ?>
            <div class="wine-info">
                <a href="<?php the_permalink(); ?>"><?php the_title( '<h1>', '</h1>' ); ?></a>
                <?php the_meta(); ?>
            </div><!-- /wine-info -->
            <div class="c"></div>
        </div><!-- /wine-section -->

        <?php       
                if ($i % 4 == 0) { echo "</div>" . $wrap_div; }
                } // end while
            } // end if
            $i++;
        ?>

这段代码分别封装了每个帖子。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-28 16:38:13

您在while循环之外递增while,因此在其中$i始终是==0,因此是$i % 4 == 0

$i++;之前移动} // end while

但是,您还应该将条件更改为$i % 4 == 3,因为在第一次迭代($i=0)中,$i % 4 == 0的计算结果为true,并且只生成一个post的初始<div>

或者,你也可以保持现状,并且:

  • 要么从$i=1而不是0开始
  • 或者在$i++后面移动while

现在,当您有4个帖子的确切倍数时,最后将出现一个额外的空<div>。这是因为您假设,当一个<div>关闭时,另一个应该会自动打开。情况并不总是如此。

假设您已经选择了上面的$i % 4 == 3解决方案,并且在while循环之后已经有了一个echo '</div>';,那么将条件更改为if(($i % 4 == 3)&& have_posts())

票数 0
EN

Stack Overflow用户

发布于 2013-10-28 17:03:47

正如风水所指出的,你在循环外增加变量。然后0 % 4 == 0计算为true --这是因为当你把0除以4,得到0。为了避免这种情况,你还需要一条规则。

另外,不要忘记,使用当前的代码,例如,如果总发帖量为12,那么在文章末尾将有一个空的"frak“div。

代码语言:javascript
复制
<?php 
    $i = 0;
    $wrap_div = "<div class='frak'>";
        if ( have_posts() ) {
            // Grab the total posts that are being displayed
            $total_posts = $wp_query->post_count;
            echo $wrap_div;
            while ( have_posts() ) {
                the_post(); ?>
                <div class="wine-section">
                    <?php the_post_thumbnail(); ?>
                    <div class="wine-info">
                        <a href="<?php the_permalink(); ?>"><?php the_title( '<h1>', '</h1>' ); ?></a>
                        <?php the_meta(); ?>
                    </div><!-- /wine-info -->
                    <div class="c"></div>
                </div><!-- /wine-section -->
                <?php 
                // Is this a fourth post? If so, make sure it is not the last post?
                if ( $i % 4 == 0 && $i != 0 && ( $i + 1 ) != $total_posts ) {
                    echo '</div>' . $wrap_div;
                }
                $i ++;
            } // end while
            // Close the $wrap_div
            echo '</div>';
        } // end if
?>

如您所见,打印结束标记和新包装的if语句现在更复杂了。它确保$i不是0(这意味着它仍然是第一个post),并且$i +1并不等于显示的帖子总数(在这种情况下,我们在while()循环之后关闭)。

如果您想知道为什么我们在while()循环之后关闭--仅仅是因为您的帖子在4上可能不一定完全是倍数(我不确定这里是否正确地翻译成英文)--如果是这种情况,并且在while循环之后没有关闭您的div --那么您就会有麻烦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19640179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档