Tìm hiểu WordPress Query và Loop để hiển thị bài viết

Tìm hiểu WordPress Query và Loop để hiển thị bài viết

WordPress Query và Loop là hai khái niệm rất quan trọng khi làm theme vì nó sẽ giúp bạn hiển thị danh sách bài viết theo ý của mình. Cách sử dụng WP_Query, get_posts, query_posts. Xem tại đây!

https://www.youtube.com/watch?v=N2r7GSWHDo4

Nhiều bạn mới tìm hiểu có thể chưa hiểu lắm về Loop nên ở bài này mình xin giải thích cặn kẽ kèm theo video minh hoạ về khái niệm WordPress Loop.

Loop là gì?

Ai học qua lập trình thì đều hiểu rằng Loop là một hành động được lặp đi lặp lại thông qua một số hàm như while, for, foreach,…Và ở trong WordPress cũng thế thôi, Loop trong WordPress là một đoạn code được đặt trong một hàm while (đa phần là vậy) các query bên trong biến toàn cục $wp_query để lấy giá trị của một post trong post type nào đó.

Những đoạn code đặt bên trong một Loop thì người ta gọi là Template Tags, các hàm này có ý nghĩa hiển thị những thành phần cụ thể như:

  • the_title() : hiển thị tiêu đề của post.
  • the_content() : hiển thị nội dung của post.
  • the_excerpt() : hiển thị nội dung excerpt của post, nếu không có excerpt thì nó sẽ tự động cắt một phần nội dung.

Ví dụ đây là một loop mặc định mà bạn thường gặp trong file index.php, content.php, single.php, page.php để hiển thị nội dung của post.

Như vậy, nếu bạn đặt đoạn code trên vào các file như home.php, index.php, category.php, archive.php, tag.php thì nó sẽ hiển thị danh sách các bài viết.

Nếu bạn đặt vào bên trong các file như single.php và page.php thì nó sẽ hiển thị nội dung của bài viết đó. Đây là cấu trúc template do WordPress định sẵn.

Ở đoạn code trên mình có nhắc qua WordPress Query, tức là khái niệm mặc định để WordPress gọi dữ liệu từ database để hiển thị ra và lưu trong một biến toàn cục tên là $wp_query, mỗi khi bạn truy cập vào website thì Query này sẽ thực thi. Vì thế nên chúng ta mới sử dụng class WP_Query để tạo một query mới để làm các phần tuỳ chọn như bài liên quan, hiển thị một bài viết từ một taxonomy nào đó ra sidebar, trang chủ,…

Tạo mới query với WP_Query

Đã nói tới Loop thì không bao giờ thiếu query vì hai cái này là vợ chồng với nhau nên đi đâu chúng ta phải lôi tụi nó đi theo chứ không tụi nó nhớ nhau mà không làm việc được.

Vậy thì bây giờ nếu chúng ta muốn tuỳ biến bài viết hiển thị ra thì phải tùy biến cái Query trước. Ví dụ như chỉnh sửa số lượng bài viết được lặp, lấy bài từ một term nào đó,…. Và để tuỳ biến, chúng ta sẽ sử dụng class WP_Query để tạo ra một Query mới với các tham số như ý của mình.

Để tạo một Query mới, chúng ta sẽ tạo một biến và kế thừa class WP_Query như sau:

Cái $args là tham số của class này (xem documentation) và bạn có thể thiết lập nó lại để lấy dữ liệu theo ý muốn. Ví dụ mình muốn cho cái Loop sẽ hiển thị 3 bài thôi thì có tham số là 'posts_per_page' => 3. Đầy đủ sẽ là:

Hoặc nếu bạn dùng quá nhiều tham số thì có thể cho vào một biến. Ví dụ:

Ba tham số trên nghĩa là nó chỉ hiển thị 3 bài viết Page và hiển thị random.

Nên xem qua: Tìm hiểu các tham số quan trọng trong WordPress Query

Sau khi đã có query mới (mà như ví dụ là $new_query) thì chúng ta sẽ viết nó vào loop như sau:

Bạn có thể sẽ thấy rằng, lúc này cái query $new_query đã được truyền vào đối tượng have_posts() để nó kiểm tra, sau đó là nó cũng được áp dụng vào đối tượng the_post() để kiểm tra xem post này đã được lặp chưa, nếu rồi thì nó sẽ bỏ qua và lặp bài tiếp theo.

Ngoài ra trong WordPress còn có một hàm để lấy dữ liệu của post tên là get_posts() nhưng nó không hay bằng WP_Query và dễ bị xung đột với các query khác nếu bạn quên hàm wp_reset_query() để reset query này vì nó chỉ có nhiệm vụ lấy dữ liệu ở biến $wp_query mặc định và trả về với kiểu Array, dĩ nhiên đồng hành với nó là phải sử dụng foreach để tạo loop.

Còn WP_Query là bạn tạo mới một query và có thể sử dụng ở bất cứ khu vực nào. Bạn cũng có thể tạo query ở một file khác rồi chỉ cần gọi ra khi cần sử dụng, cũng không cần clear query.

Tuỳ biến query hiện có với query_posts

Như các bạn đã biết là khi tạo một Query mới, thì mỗi khi viết loop ta phải cho biến query đó áp dụng vào đối tượng have_posts()the_post(). Nhưng bây giờ bạn muốn trực tiếp sửa một query luôn mà không cần sửa lại loop thì sao? Đó là sử dụng query_posts().

Hàm này sẽ trực tiếp thay đổi các giá trị bên trong biến $wp_query mặc định, có nghĩa là nếu bạn không reset query dưới mỗi loop thì các query ở những trang khác cũng sẽ bị thay đổi.

Mình có ví dụ như sau để sửa lại toàn bộ query bên trong một trang, chỉ cần đặt nó vào file functions.php

Lúc này bạn sẽ thấy, toàn bộ các trang từ trang chủ đến các trang archives đều chỉ hiển thị mỗi trang một bài, tức là biến $wp_query đã được bị đâm chọt vào bởi hàm query_posts(). Hoặc ta cũng có thể làm cho nó linh hoạt hơn như chỉ thực hiện ở trang chủ.

Còn nếu bạn muốn chỉ thực hiện với một loop nào đó thì phải đặt đoạn query_posts() bên trên một loop và nhớ thêm wp_reset_query() ở ngay sau endwhile.

Dễ hiểu đúng không nào

Tóm tắt bài

Trong bài này ta đã tìm hiểu qua khái niệm Query và Loop trong WordPress. Query có nhiệm vụ lấy dữ liệu từ bên trong database và Loop sẽ tiến hành lặp đi lặp lại cái Query và truyền dữ liệu vào đối tượng the_post() để hiển thị thông tin bài viết với Template Tags.

  • Nếu muốn tạo Query mới, dùng class WP_Query.
  • Nếu muốn sửa Query mặc định, dùng query_posts.
  • Hàm get_posts() sẽ trả về thông tin bài viết với giá trị kiểu Array, vì thế phải dùng foreach để loop. Nói chung cái này nên hạn chế dùng.

Và mình cũng xin nói thêm cho những ai chưa biết rằng tất cả những việc liên quan đến gọi bài viết đa phần ta đều sử dụng query và loop để hiển thị ra, nên khái niệm này tuy đơn giản nhưng rất quan trọng và hữu dụng.

WordPress FAQ  » Học WordPress > Lập trình WordPress > WordPress API


 WordPress FAQ   |   Hoc WordPress   |   Su dung WordPress   |   Lap trinh WordPress |   Plugin WordPress  |  Thuat ngu WordPress    |  Theme WordPress  |  Lap trinh Themes |  Lap trinh plugin

Ảnh. Tìm hiểu WordPress Query và Loop để hiển thị bài viết
Ảnh. Tìm hiểu WordPress Query và Loop để hiển thị bài viết

Chia sẻ bài viết

Bình luận