оператор переключения WordPress внутри цикла - PullRequest
1 голос
/ 31 марта 2011

Я пытаюсь использовать оператор 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; ?>

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

Ответы [ 5 ]

1 голос
/ 31 марта 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
?>
1 голос
/ 31 марта 2011

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

0 голосов
/ 31 марта 2011

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

0 голосов
/ 31 марта 2011

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

0 голосов
/ 31 марта 2011

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

Например:

if(have_posts()) {
   while(have_posts()) {
       the_post(); 
       $intcounter++;
       switch ($intcounter){
           case 1:
             ...
             ...
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...