оператор переключения wordpress в цикле

Я пытаюсь использовать оператор switch в цикле worpdpress для изменения классов в 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; ?>

Я упускаю что-то очевидное? Спасибо


person dmag    schedule 30.03.2011    source источник
comment
вы получаете ожидаемый результат без правильных имен классов?   -  person Chris McClellan    schedule 31.03.2011


Ответы (5)


вы захватываете глобальный $intCounter;, но устанавливаете и увеличиваете $intcounter; Не уверен, что это проблема, потому что вы инициализируете $intcounter=0; и правильно увеличиваете его. Так что это только означает, что global $intCounter; не нужен.

person Chris McClellan    schedule 30.03.2011
comment
Спасибо, Крис - замечательно, это именно то, что было! Я смотрел на это уже час! - person dmag; 31.03.2011
comment
Всегда помогает иногда иметь свежий взгляд. Никогда не больно отойти от него и подышать свежим воздухом (в моем случае выкурить сигарету), а затем вернуться к нему. - person Chris McClellan; 31.03.2011

У меня такое чувство, что это как-то связано с тем, что вы используете global. Обычно он используется в области видимости, чтобы сообщить ему, что вы хотите использовать глобально определенную версию переменной, а не локальную.

Я пошел дальше и переделал структуру блоков кода (для эстетики, пожалуйста, пошутите меня) с помощью фигурных скобок и удалил ключевое слово 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
?>
person Mr. Llama    schedule 30.03.2011
comment
Спасибо, GigaWatt, вы правы, мне не нужно было "глобальное" объявление. Красиво отформатированный код! Спасибо - person dmag; 31.03.2011

Почему разветвляются вокруг значения по умолчанию и для переключателя, а не для «если» и «пока»? Делает код более трудным для чтения. Также не уверен, почему вы используете глобальный для $ intcounter (который, кстати, имеет C вместо c), если для этого нет причины, о которой я не знаю. В остальном кажется, что это должно работать.

person Cristian    schedule 30.03.2011

У вас есть заглавная буква C в вашем глобальном $ intCounter, но вы увеличиваете и включаете $ intcounter. Это инициализирует 2 разные переменные. В противном случае оператор switch и цикл работают нормально.

person Jonas    schedule 30.03.2011

Не используйте ":" для ваших stamentlists, но используйте фигурные скобки {}.

Eg:

if(have_posts()) {
   while(have_posts()) {
       the_post(); 
       $intcounter++;
       switch ($intcounter){
           case 1:
             ...
             ...
       }
   }
}
person Buggenator    schedule 30.03.2011
comment
То, как у него это есть, в порядке. ‹? Php while (have_posts ()): the_post (); ? ›Вполне приемлемо. - person Chris McClellan; 31.03.2011