Đảo ngược thứ tự hiển thị field dữ liệu – ACF
Trong bài viết trước tôi có hướng dẫn 1 bài viết check điều kiện để lấy data cuối trong repeater field – Advanced Custom Fields (ACF) và hiển thị trong bài này sẽ thay đổi thứ tự hiển thị dữ liệu 1 cách đơn giản khi sử dụng plugin ACF
Mã PHP này sử dụng để lặp qua trường repeater field có tên ‘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php $outs = array(); if( have_rows('shop_product') ): while ( have_rows('shop_product') ) : the_row(); ob_start(); ?> <!-- loop --> <div class="shop-item"> <div class="image-hover"> <div class="image-hover-inner"> <img src="<?php the_sub_field('product_image');?>"> <div class="image-caption"> <div class="image-caption-inner"> <a href="<?php the_sub_field('product_url');?>" target="_blank">Mua ngay</a> </div> </div> </div> </div> </div> <!-- end loop --> <?php $outs[] = ob_get_clean(); endwhile; else : endif; $outs = array_reverse($outs); echo implode($outs); ?> |
shop_product
‘ trong WordPress bằng cách sử dụng trường tùy chỉnh nâng cao (ACF) và tạo đầu ra HTML cho từng mục trong bộ lặp.
$outs = array();
– Dòng này khởi tạo một mảng trống có tên $outs
. Mảng này sẽ được sử dụng để lưu trữ đầu ra HTML được tạo cho từng item trong bộ lặp ‘shop_product
‘.
if( have_rows('shop_product') ):
– Câu lệnh điều kiện này kiểm tra xem có row
(mục) nào trong repeater field ‘shop_product
‘ hay không.
while ( have_rows('shop_product') ) : the_row(); ob_start();
– Bắt đầu một vòng lặp lặp qua từng hàng trong bộ lặp ‘shop_product
‘.
the_row()
thiết lập các hàm ACF để hoạt động với hàng hiện tại và ob_start()
khởi động bộ đệm đầu ra để thu thập HTML được tạo bên trong vòng lặp.
Mã bên trong <!-- loop --> ... <!-- end loop -->
là cấu trúc HTML để hiển thị một item riêng lẻ trong cửa hàng. Nó sử dụng các hàm ACF như the_sub_field()
tìm nạp dữ liệu từ hàng hiện tại, chẳng hạn như URL hình ảnh sản phẩm và URL sản phẩm. Nó tạo một phần cho mỗi mặt hàng có hình ảnh và liên kết “Mua ngay”. Mã HTML này được ghi lại bởi bộ đệm đầu ra đã bắt đầu trước đó.
$outs[] = ob_get_clean();
– Sau khi xử lý mã HTML cho một mục, nó sẽ được lấy từ bộ đệm đầu ra bằng cách sử dụng ob_get_clean()
và thêm vào mảng $outs
. Mảng này hiện chứa HTML cho tất cả các mục trong bộ lặp ‘shop_product
‘.
endwhile;
– Đánh dấu sự kết thúc của vòng lặp
else :
– Nếu không có hàng nào trong bộ lặp ‘shop_product
‘, phần mã này sẽ xử lý trường hợp khác.
endif;
– Kết thúc câu lệnh điều kiện.
$outs = array_reverse($outs);
– Sau vòng lặp, mã sẽ đảo ngược thứ tự các mục trong mảng $outs
. Nó đảo ngược thứ tự của các mục được tạo trong vòng lặp một cách hiệu quả, do đó mục gần đây nhất sẽ được hiển thị đầu tiên.
echo implode($outs);
– Dòng này nối đầu ra HTML được lưu trữ trong mảng $outs
thành một chuỗi bằng cách sử dụng implode()
và sau đó in toàn bộ chuỗi HTML. Đây là cách nội dung HTML cho tất cả các mục trong bộ lặp được xuất ra trang web.
Về cơ bản, mã sẽ lặp qua các mục lặp lại ‘shop_product
‘, tạo nội dung HTML cho từng mục và lưu trữ nội dung đó trong một mảng. Cuối cùng, nó đảo ngược mảng và xuất nội dung HTML cho tất cả các mục.
Nguồn code tham khảo từ stackoverflow – Advanced Custom Fields Repeater – How to reverse order (WordPress)
Hy vọng việc diễn giải trên sẽ giúp ích cho nhiều người.
Trân trọng.