2015-01-14 3 views
0

Im пытается настроить пользовательский тип сообщения и изменять вывод в зависимости от порядка сообщений. Я ниже следующее, но порядок вывода работает только правоWordpress Loop, добавьте определенный класс во второй пост, третий, сбросьте, добавьте класс и т. Д.

Результат выглядит следующим образом (он пропускает вокруг после первых 3 сообщений):

  • John Doe, Vintage Burbank 8
  • John Doe , Урожай Бербанк 7 два
  • Джон Доу, Урожай Бербанк 6 три
  • Джон Доу, Урожай Бербанк 5 два
  • Джон Доу, Урожай Бербанк 4
  • John Doe, Vintage Бербанк 3 три
  • John Doe, Vintage Бербанк 2
  • John Doe, Vintage Бербанк 1 два

Я хочу, чтобы выйти, как это:

  • John Doe , Vintage Бербанк 8
  • John Doe, Vintage Бербанк 7 два
  • John Doe, Vintage Бербанк 6 три
  • Джон Доу, Урожай Бербанк 5
  • Джон Доу, Урожай Бербанк 4 два
  • Джон Доу, Урожай Бербанк 3 три
  • Джон Доу, Урожай Бербанк 2
  • Джон Доу, Урожай Бербанк 1 два

    <?php 
        $args = array(   
         'post_type' => 'testimonials', 
         'posts_per_page' => -1 
        ); 
    
        $query = query_posts($args); 
    
    ?> 
    <?php $i = 1; while (have_posts()) : the_post(); ?> 
    
        <?php if($i%3 == 0) : ?> 
    
          <?php the_title();?> three 
    
         <?php elseif($i%2 == 0) : ?>  
    
          <?php the_title();?> two 
    
         <?php else : ?> 
    
          <?php the_title();?> 
    
         <?php endif; ?> 
         <?php $i++; ?> 
    
    <?php endwhile;?> 
    <?php wp_reset_query(); ?> 
    
+1

Пожалуйста, используйте 'if() {}' вместо этого ужасного 'if(): endif' thing. Это упрощает чтение в миллиард раз. Также каждая строка не требует закрытия и повторного открытия тега PHP. Вы только это делаете, если переключитесь на вывод жестко закодированного HTML/JS. – developerwjk

+0

@acontell, если сообщения выходили 3 за раз, 2-й всегда будет отмечен 2 и так далее. Поэтому, если я выведу все из них, и есть 11 сообщений. 2-й, 5-й, 8-й, 11-й будут отмечены 2 – RMH

+0

@ RMH Хорошо, спасибо, я думаю, что понимаю эту идею. Я отправил ответ, я думаю, он должен работать. – acontell

ответ

0

Хорошо, я думаю, что ваш код нормально, единственная проблема заключается в том, что вы обновляете $i плохо. Я изменил ваш код, и я думаю, что он должен работать (дайте мне знать, если это не так).

<?php 
$args = array(
    'post_type' => 'testimonials', 
    'posts_per_page' => -1 
); 

$query = query_posts($args); 
?> 
<?php $i = 1; 
while (have_posts()) : the_post(); ?> 

    <?php if ($i % 3 == 0) : ?> 

     <?php the_title(); ?> three 

    <?php elseif ($i % 2 == 0) : ?>  

     <?php the_title(); ?> two 

    <?php else : ?> 

     <?php the_title(); ?> 

    <?php endif; ?> 
    <?php /* Comment this line */ ?> 
    <?php /* $i++; */?> 
    <?php /* Add this one */ ?> 
    <?php $i = ($i >= 3) ? 1 : ($i + 1); ?> 

<?php endwhile; ?> 
<?php wp_reset_query(); ?> 
+0

это работает отлично, спасибо! – RMH

0

Почему вы используете везде? Также вам нужно сбросить $ i, когда вы получите матч, и он должен работать. Попробуйте это:

<?php 
$args = array(
    'post_type' => 'testimonials', 
    'posts_per_page' => -1 
); 

$posts = get_posts($args); 
$i = 1; 
foreach ($posts as $post) { 
    setup_postdata($post); 
    if($i%3 == 0) { 
     echo get_the_title().' three'; 
     $i = 0; 
    } 
    elseif($i%2 == 0) { 
     echo get_the_title().' two'; 
     $i = 0; 
    } 
    else { 
     the_title(); 
    } 
    $i++; 
} 
wp_reset_postdata(); 
?> 
Смежные вопросы