使用不同的父包装器在PHP中输出奇数或偶数帖子 - Wordpress

时间:2012-06-07 01:38:25

标签: php wordpress

这是我想要完成的事情:

我希望输出不同的帖子,具体取决于它们是奇数还是使用不同的父包装,用于奇数帖子和偶数帖子。例如,可以将偶数帖子输出到具有evenWrapper类的父级,并且可以将奇数帖子输出到具有oddWrapper类的父级。

我使用modulus运算符获得了整体理论。我陷入困境的地方实际上是在不同的父包装中包含偶数或奇数帖子。以下是我到目前为止的情况:

<?php if ( have_posts() ):
$c = 0;
?>


<div class="six columns alpha">

<?php 
while ( have_posts() ) : the_post();

    if($c % 2 == 0) : ?>

        <?php /* posts with even numbers are outputted here */ ?>

<?php   
    endif;
$c++;
endwhile;

?>

</div>

<?php endif; ?>

以上代码适用于输出偶数帖子。如您所见,父包装器位于while循环周围,并使用if运算符检查modulus语句。我的第一个猜测是创建一个else语句,如果它们不是偶数,则将不同的父项包装在它们周围。但我遇到的问题是它被while循环捕获并且每次都输出父包装。

我如何从这里继续将帖子输出到另一个父容器?我是否必须制作另一个while循环?

3 个答案:

答案 0 :(得分:1)

我还没有完全掌握WordPress API的速度,因此可能有或没有更好的方法来获取帖子详细信息,但这应该可行:

<?php
    $oddPosts = array();
    $evenPosts = array();
    $i = 0;
?>
<?while(have_posts()) : the_post()?>
<?
    $post = the_content(); // etc...
    if(++$i % 2 == 0) {
        array_push($evenPosts, $post);
    } else {
        array_push($oddPosts, $post);
    }
?>
<?endwhile;?>

<div class="wrapper odd">
    <?foreach($oddPosts as $post):?>
        <?= $post ?>
    <?endforeach?>
</div>
<div class="wrapper even">
    <?foreach($evenPosts as $post):?>
        <?= $post ?>
    <?endforeach?>
</div>

答案 1 :(得分:0)

实际上,它真的很简单。是的,你也需要一个else声明。这是一个例子:

<?php if ($c % 2 === 0): ?>
<div class="evenWrapper">
<?php else: ?>
<div class="oddWrapper">
<?php endif; ?>
...
</div>

您也可以这样做:

<?php
$class = $c % 2 === 0 ? 'evenWrapper' : 'oddWrapper';
?>
<div class="<?php echo $class; ?>">
</div>

答案 2 :(得分:0)

只需使用$ wp_query-&gt; current_post获取帖子的当前索引位置:

<?php if (($wp_query->current_post) % 2) $class="evenWrapper"; else $class="oddWrapper"; ?>

<article <?php post_class($class); ?>>
 ...content here ...
</article>