1

问题。我想要做的是调用一个特定于类别的循环,但是,我希望返回的内容从最近的第一个显示,以数字编号,以便对于显示的每 2 个,将回显一个向他们确定的 css 类和第三个结果是显示一个完全不同的类,因为这就是我编写 html 的方式。这是我试图让 HTML 显示的内容:

<div id="content">
    <div class="block1"></div>
    <div class="block1"></div>
    <div class="block2"></div>
    <div class="block1"></div>
    <div class="block1"></div>
    <div class="block2"></div>
</div>

如果有更多结果,那么前两个将在第一个 div 中命名,所有结果中的第三个将分配给它的类名。帮助将不胜感激。

备注:

<?php query_posts( 'cat=featured&showposts=4' ); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php foreach($recent as $index => $postObj) {
  $class = $index + 1 % 3 === 0 ? 'block2' : 'block1'; 
}
?>
<h1><?php the_title(); ?></h1>
<?php endwhile; else: ?>
<p>Sorry, no posts matched your criteria.</p>
<?php endif; ?>

<?php get_footer(); ?>

但是它返回了帖子的数量,但在帖子下它返回了警告:foreach() 提供的参数无效 但是尝试过反复试验,我认为我的语法很糟糕。

4

1 回答 1

3

您正在寻找的是模运算符。取模的作用是求除法运算的余数。实际上,结果在 0..N-1 的范围内,其中 N % N = 0。

foreach($posts as $index => $postObj) {
  $class = $index + 1 % 3 === 0 ? 'block2' : 'block1';

这完成了您想要的,因为循环逻辑如下所示:

1 % 3 = 1 -> block1
2 % 3 = 2 -> block1
3 % 3 = 0 -> block2

您的代码必须是:

<?php
  query_posts( 'cat=featured&showposts=4' );
  $index = 1;

  if ( have_posts() ) :
    while ( have_posts() ) : the_post();

    $class = $index++ % 3 === 0 ? 'block2' : 'block1'; 
?>
<div class="<?php echo $class ?>">
  <h1><?php the_title(); ?></h1>
</div>
<?php endwhile; else: ?>
<p>Sorry, no posts matched your criteria.</p>
<?php endif; ?>

<?php get_footer(); ?>

运算符的$index++意思是“在使用它之后增加 $index”。因此,请注意循环是如何设置的。在循环之前,我们设置$index为 1。在循环内部,我们$class使用模技术设置,然后递增$index。然后我们必须创建一个容器 DIV,就像您提到的那样,并在那里回显该类。

于 2012-06-27T16:36:37.290 回答