循环中的wordpress switch语句

时间:2011-03-30 21:27:49

标签: php wordpress wordpress-theming

我正在尝试在worpdpress循环中使用switch语句来更改div上的类,但递增计数器($ IntCounter)似乎没有在循环中触发:

<?php
global $intCounter;
$intcounter = 0;
query_posts('category_name=clients&posts_per_page=3&tag=new-work');
if(have_posts()) : while(have_posts()) : the_post(); 
        $intcounter++;
        switch ($intcounter){
            case 1:
                $ThisPostCSSClass ="new-work-post span-7 colborder ";
                break;
            case 2:
                $ThisPostCSSClass ="new-work-post span-8 colborder ";
                break;
            case 3:
                $ThisPostCSSClass ="new-work-post span-7 last";
                break;
            default:{
                $ThisPostCSSClass="noclass";
            }

        }

    ?>
<div class="<?php echo $ThisPostCSSClass;?>" id="<?php the_ID(); ?>">
    <div class="">
    <?php the_content(); ?>
        <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
    <?php the_excerpt(); ?>
    </div>
</div> <!-- .post -->
    <?php endwhile;endif; ?>

我错过了一些明显的东西吗?感谢

5 个答案:

答案 0 :(得分:1)

您正在抓取全局$intCounter;,但设置并递增$intcounter; 不确定这是否是问题,因为您正在初始化$intcounter=0;并正确递增它。所以这只意味着global $intCounter;是不必要的。

答案 1 :(得分:1)

我觉得这与您对global的使用有关。通常,它在范围内用于告诉它您要使用变量的全局定义的版本而不是本地变量。

我继续用花括号重新编写代码块的结构(为了美学,请幽默我)并删除了全局关键字。尝试尝试这个块,看看它是否适合你:

<?php

query_posts('category_name=clients&posts_per_page=3&tag=new-work');

if(have_posts()) {
    $intcounter = 0; // Moved this to within the IF block

    while(have_posts()){
        // If you did want to use the "global" keyword, you'd probably use it here:
        // global $intcounter;

        the_post(); 
        $intcounter++;

        switch ($intcounter){
            case 1:
                $ThisPostCSSClass ="new-work-post span-7 colborder ";
                break;
            case 2:
                $ThisPostCSSClass ="new-work-post span-8 colborder ";
                break;
            case 3:
                $ThisPostCSSClass ="new-work-post span-7 last";
                break;
            default:  // Curly braces not required here.
                $ThisPostCSSClass="noclass";
        } // Switch

?>
<div class="<?php echo $ThisPostCSSClass;?>" id="<?php the_ID(); ?>">
    <div class="">
    <?php the_content(); ?>
        <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
    <?php the_excerpt(); ?>
    </div>
</div> <!-- .post -->
<?php

    } // While

} // If
?>

答案 2 :(得分:0)

你的全局$ intCounter中有一个大写字母C,但你正在递增并启用$ intcounter。这初始化了2个不同的变量。 否则switch语句和循环工作正常。

答案 3 :(得分:0)

为什么分支是默认的,对于交换机,而不是if和while?使代码更难阅读。也不确定为什么你使用全局for $ intcounter(btw有一个C而不是c),除非有一个我不知道的原因。除此之外似乎应该有效。

答案 4 :(得分:-1)

不要在作品列表中使用“:”,而是使用Curly bracket {}。

例如:

if(have_posts()) {
   while(have_posts()) {
       the_post(); 
       $intcounter++;
       switch ($intcounter){
           case 1:
             ...
             ...
       }
   }
}