2012-01-20 30 views
15

Tôi đang sử dụng một vòng lặp trong wordpress để xuất các bài đăng. Tôi muốn bọc mỗi ba bài viết bên trong một div. Tôi muốn sử dụng một truy cập để tăng trên mỗi lần lặp của vòng lặp nhưng tôi không chắc chắn về cú pháp có nội dung "nếu $ i là bội số của 3" hoặc "nếu $ i là bội số của 3 - 1".Vòng lặp PHP: Thêm một div xung quanh mỗi cú pháp ba mục

$i = 1; 
if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); 
    // If is the first post, third post etc. 
    if("$i is a multiple of 3-1") {echo '<div>';} 

    // post stuff... 

    // if is the 3rd post, 6th post etc 
    if("$i is a multiple of 3") {echo '</div>';} 

$i++; endwhile; endif; 

Làm cách nào để thực hiện điều này? cảm ơn!

+0

gì xảy ra nếu tôi muốn thêm vào chỉ nếu nó là hơn 3 mục? và khi nó bằng 3 món đồ, hãy để nó mà không có thay đổi? –

+0

Đây là cách dễ nhất tôi có thể tìm thấy: http://stackoverflow.com/questions/28247770/loop-through-wordpress-posts-and-wrap-each-x-post-in-a-div –

Trả lời

44

Tại sao không làm như sau? Điều này sẽ mở nó và đóng nó sau bài thứ ba. Sau đó đóng div kết thúc trong trường hợp không có bội số của 3 để hiển thị.

$i = 1; 
//added before to ensure it gets opened 
echo '<div>'; 
if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); 
    // post stuff... 

    // if multiple of 3 close div and open a new div 
    if($i % 3 == 0) {echo '</div><div>';} 

$i++; endwhile; endif; 
//make sure open div is closed 
echo '</div>'; 

Trong trường hợp bạn không biết, % là người điều khiển modus sẽ trả lại phần còn lại sau khi hai số được chia.

+0

có vẻ tốt - có lợi thế nào khi sử dụng cái này hay cái khác về mặt tốc độ hay hiệu quả? Tôi nghĩ rằng bằng cách sử dụng các nhà điều hành modulus làm cho một ít dòng mã –

+0

tôi hiểu bây giờ-- bằng cách sử dụng modulus sẽ tạo ra một div kín nếu không có nhiều của 3. Cảm ơn bạn! –

+1

Tôi thích điều này tốt hơn vì vậy nó đảm bảo đóng tất cả các 'divs' mở. Những gì tôi thực sự sẽ làm là lấy div đầu tiên và lặp lại nó bên ngoài vòng lặp. Bằng cách đó, ngay cả khi chỉ có 1 bạn có một thẻ mở/đóng. Điều này sẽ đảm bảo bạn không giết định dạng. Việc xử lý thực sự của nó không nên ảnh hưởng đến tốc độ vì nó là một phương trình "cơ bản". – kwelch

9

Sử dụng modulus điều hành:

if ($i % 3 == 0) 

Trong mã của bạn, bạn có thể sử dụng:

if($i % 3 == 2) {echo '<div>';} 

if($i % 3 == 0) {echo '</div>';} 
+0

bạn có thể vui lòng giúp tôi đặt nó trong bối cảnh của mã tôi dán trong câu trả lời của tôi ở trên? –

+0

@ j-man86: bạn có thể dùng nó, thay thế '" $ i là bội số của 3-1 "' với '$ i% 3 == 0' –

+0

@ j-man86: Vui lòng xem cập nhật của tôi. –

0

nếu bạn không cần phải thêm div bạn có thể sử dụng này:

$i = 0; 

$post_count = $wp_query->found_posts; 

if ($wp_query->have_posts()) : while ($wp_query->have_posts()) :$wp_query->the_post(); 

// If is the first post, third post etc. 
(($i%3) == 0) ? echo '<div>' : echo ''; 

// post stuff... 

// if is the 3rd post, 6th post etc or after the last element 

($i == ($post_count - 1) || (++$i%3) == 0) ? echo '</div>' : 
echo ''; 

endwhile; endif; 
Các vấn đề liên quan