2013-09-29 16 views
2

我有這段代碼,我需要每4個帖子關閉一行。每篇文章都在div內。我嘗試了一些東西,但是我沒有執行我的代碼。需要在php中添加一個計數器來分隔每4列的行

<?php 
    echo "<div class='row'>"; 
    global $post; 
    $all_events = tribe_get_events(
     array(
      'eventDisplay'=>'upcoming', 
      //'posts_per_page'=>10, 
    ) 
    ); 

    foreach($all_events as $post) { 
    setup_postdata($post); 
    ?> 

    <div class="col-sm-3"> 
     <span class="event-date"><?php echo tribe_get_start_date($post->ID, true, 'j M'); ?></span> 
     <h3><?php the_title(); ?></h3> 
     <?php if (has_post_thumbnail()) { ?> 
      <div class="event-thumb"> 
       <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a> 
      </div> 
      <div class="event-excerpt"> 
       <?php the_excerpt(); ?> 
      </div> 
     <?php } else { ?> 
      <div class="event-content"> 
       <?php the_content(); ?> 
      </div> 
     <?php } ?> 

    </div> 

<?php } //endforeach ?> 
<?php wp_reset_query(); ?> 
+0

所以你基本上想要一個包裝每四個條目的列表? – Mario

回答

3
<?php 
    echo "<div class='row'>"; 
    global $post; 
    $all_events = tribe_get_events(
     array(
      'eventDisplay'=>'upcoming', 
      //'posts_per_page'=>10, 
    ) 
    ); 
     $count = 1; 
    foreach($all_events as $post) { 
    setup_postdata($post); 
    ?> 

    <div class="col-sm-3"> 
     <span class="event-date"><?php echo tribe_get_start_date($post->ID, true, 'j M'); ?></span> 
     <h3><?php the_title(); ?></h3> 
     <?php if (has_post_thumbnail()) { ?> 
      <div class="event-thumb"> 
       <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a> 
      </div> 
      <div class="event-excerpt"> 
       <?php the_excerpt(); ?> 
      </div> 
     <?php } else { ?> 
      <div class="event-content"> 
       <?php the_content(); ?> 
      </div> 
     <?php } ?> 

    </div> 
<?php 
if($count == 4){ 
    echo "<div class='seperator'></div>"; 
    $count =1; 
    } 
?> 
<?php $count++; } //endforeach ?> 
<?php wp_reset_query(); ?> 
0

您需要modulo operator。它的工作原理是這樣的:

$i == 0; 
foreach($some_array as $some_value){ 
    if ($i % $number_to_divide_by == 0) { 
     // do something here every nth time 
    } 
    $i++; 
} 
+0

我知道,但我的代碼中的實現有問題。 –

3

其實我在CSS解決這個100%,所以你不需要任何計算或你的PHP代碼中處理。

看一看this JSFiddle

float: left將導致單個元素都相互跟隨(左對齊)。 clear: left4 * n + 1第(nth-child(4n+1))元素將清除此,基本上迫使一個換行符。

有一個需要注意的地方:如果在一行中沒有空間容納所有4個條目,那麼最終會得到額外的包裝,這可以通過爲容器定義一個固定的width來避免。


簡化的代碼版本的PHP將只算寫的領域和根據需要添加一個換行符:

$i = 1;      // counter 
foreach ($events as $event) { // iterate over all events 
    if ($i++ % 4 == 0)   // a % b will be 0 for 4, 8, etc. 
     echo '<br />';   // print the line break using whatever HTML you see fit. 
    print_event($event);  // print the actual event 
} 

你可能會問我是否實際打印了之前檢查線路中斷事件:這是爲了防止額外的換行符,如果條目數是4的倍數,即我避免有一個空的尾隨線。

相關問題