1

問題。私がやろうとしているのは、カテゴリ固有のループを呼び出すことですが、返されたものを最新のものから最初に表示し、表示される2つごとに確認されたcssクラスをエコーし​​、これが私のhtmlの書き方であるため、まったく異なるクラスを表示する3番目の結果。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>

さらに結果がある場合、最初の 2 つには最初の div で名前が付けられ、すべての結果の 3 番目にはそのクラス名が割り当てられます。助けていただければ幸いです。

注目:

<?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 をインクリメントする」ことを意味します。そのため、ループがどのように設定されているかに注意してください。ループの前に 1 に設定$indexします。ループ内では$class、モジュロ手法を使用して設定し、インクリメントします$index。次に、前述のようにコンテナ DIV を作成し、そこにクラスをエコーする必要があります。

于 2012-06-27T16:36:37.290 に答える