Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Làm chủ WP_Query: Sử dụng Vòng lặp

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: An Introduction
Mastering WP_Query: Related Functions

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Như tôi đã phác hoạ trong phần giới thiệu về loạt bài này, lớp WP_Query có bốn yếu tố chính:

  • các đối số cho truy vấn, việc sử dụng các tham số sẽ được khái quát chi tiết trong loạt bài này
  • bản thân truy vấn
  • vòng lặp, sẽ xuất nội dung của bài viết, tiêu đề hoặc bất cứ thứ gì bạn muốn hiển thị
  • kết thúc: đóng thẻ if và while và thiết lập lại dữ liệu bài viết

Trong bài này, tôi sẽ hướng dẫn cho bạn cách sử dụng vòng lặp với WP_Query, bao gồm cả hai cách chính để cấu trúc vòng lặp của bạn và cách sử dụng nhiều vòng lặp.

Nên dùng Vòng lặp ở đâu

Không có vòng lặp, sẽ không có gì được hiển thị trên trang web của bạn. Sau khi WordPress chạy truy vấn, sử dụng các đối số mà bạn đã định nghĩa, thì nó cần phải được biết những gì cần xuất ra từ dữ liệu mà nó lấy được. Đây là lúc vòng lặp phát huy tác dụng của nó.

Như vậy, vòng lặp đến sau truy vấn của bạn, và nó sử dụng ba thẻ:

  • if( $query->have_posts() ) kiểm tra xem có bài viết nào hay không.
  • while( $query->have_posts() ) lặp lại vòng lặp cho mỗi bài viết miễn là còn có bài viết để truy xuất.
  • $query->the_post() truy cập vào bài viết cụ thể đó.

Như vậy, đây là nơi vòng lặp phù hợp ở trong lớp WP_Query:

Sau khi chạy vòng lặp, tất cả những gì còn lại cần phải làm là dọn dẹp mọi thứ bằng cách sử dụng wp_reset_postdata().

Cấu trúc của Vòng lặp

Cách vòng lặp của bạn được cấu trúc sẽ phụ thuộc vào dữ liệu mà bạn muốn hiển thị từ bài viết của mình. Dưới đây là một vòng lặp mẫu, xuất ra tiêu đề bài viết, hình ảnh đặc trưng và trích dẫn. Bạn nên sử dụng một vòng lặp như thế này trên một trang lưu trữ.

Vòng lặp này hiển thị chính xác những gì mà tôi đã mô tả ở trên: hình ảnh đặc trưng, tiêu đề và trích dẫn.

Nâng cao Vòng lặp: Kiểm tra Nội dung

Nhưng đôi khi có thể bạn muốn thêm một tiêu đề phía trước danh sách các bài viết của bạn, hoặc bạn có thể muốn bao gồm tất cả chúng trong một phần tử kho chứa. Nếu bạn chỉ đơn giản là thêm đoạn code này phía trước vòng lặp của bạn, thì nó sẽ xuất ra bất kể truy vấn có thật sự trả về bất kỳ dữ liệu nào hay không, có nghĩa là bạn có thể có một tiêu đề mà không có gì ở bên dưới nó, hoặc một số markup không cần thiết.

Điều này rất dễ dàng khắc phục bằng cách bao gồm phần tử hoặc tiêu đề bên trong thẻ if của bạn:

Ở đây bạn có thể thấy tôi đã kiểm tra xem có bất kỳ bài viết nào lấy được từ truy vấn của tôi hay không, và nếu có tôi mở một phần tử kho chứa và thêm một tiêu đề.

Điều này cũng hữu ích nếu bạn muốn xuất kết quả của truy vấn dưới dạng một danh sách. Giả sử tôi muốn tạo danh sách tất cả bài viết trong một danh mục nhất định. Phần tử ul không nằm bên trong vòng lặp của tôi vì nó không liên quan đến một bài viết cụ thể, nhưng tôi chỉ muốn xuất nó ra nếu có bài viết. Vì vậy tôi sử dụng code này:

Code này kiểm tra xem truy vấn có lấy được bất kỳ bài viết nào hay không, và nếu có, nó sẽ mở phần tử ul và chạy vòng lặp.

Chạy Vòng lặp Phụ

Cần lưu ý rằng, mặc dù bạn có thể sử dụng WP_Query để chạy nhiều hơn một vòng lặp, nhưng bạn phải đặt lại dữ liệu bài viết và bắt đầu một đối tượng thứ hai của WP_Query để thực hiện việc này. Điều này là bởi vì mỗi vòng lặp của bạn sẽ xuất ra dữ liệu dựa trên các đối số khác nhau.

Ví dụ này hiển thị đoạn trích và hình ảnh đặc trưng cho bài viết đầu tiên và sau đó chỉ là tiêu đề của mỗi bài viết tiếp theo:

Tôi đã sử dụng hai đối số chính ở đây:

  • 'posts_per_page' => '1', được sử dụng với truy vấn đầu tiên, chỉ xuất ra các bài viết gần đây nhất.
  • 'offset' = '1', được sử dụng với truy vấn thứ hai, bỏ qua bài viết đầu tiên, đảm bảo nó không lặp lại trong danh sách ở bên dưới.
  • Như bạn có thể thấy từ đoạn code ở trên, vòng lặp hơi khác cho mỗi truy vấn. Vòng lặp đầu tiên xuất ra hình ảnh đặc trưng, ​​tiêu đề và đoạn trích, trong khi vòng lặp thứ hai kiểm tra xem truy vấn có bài viết hay không và nếu có, mở một phần tử ul và bao gồm mỗi tiêu đề của bài viết trong một phần tử li và một liên kết đến trang của nó.

Bạn cũng sẽ thấy rằng, tôi đã sử dụng wp_reset_postdata() sau cả hai vòng lặp. Nếu tôi không làm điều này, thì vòng lặp thứ hai vẫn sẽ xuất ra dữ liệu từ vòng lặp đầu tiên.

Tóm tắt

Nếu không có vòng lặp, WP_Query không thật sự làm được nhiều điều. Vòng lặp là code mà bạn sử dụng để hiển thị dữ liệu mà WordPress đã lấy được từ cơ sở dữ liệu dựa trên các đối số truy vấn của bạn.

Như tôi đã minh hoạ, có một vài biến thể trên vòng lặp. Một vòng lặp đơn giản sẽ chỉ xuất ra tất cả các bài viết theo thứ tự mà bạn đã chỉ định trong đối số truy vấn của bạn (hoặc mặc định theo ngày tháng theo thứ tự giảm dần). Nếu bạn tách if( $query->have_posts() )while( $query->have_posts() ) ra, thì bạn có thể chèn thêm markup bên ngoài vòng lặp của bạn, nhưng chỉ khi truy vấn của bạn có dữ liệu trả về. Và cuối cùng, bằng cách chỉ định các đối số thay thế và sử dụng wp_reset_postdata() sau mỗi vòng lặp, bạn có thể sử dụng WP_Query nhiều hơn một lần để tạo ra nhiều vòng lặp trên trang của bạn.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.