20. Tìm hiểu đối tượng WP_Query trong WordPress

WP_Query được xem là một phần khá là quan trọng đối với WordPress, nếu bạn sử dụng thành thạo nó thì xem như phần tương tác databasekhông còn là vấn đề khó với bạn. Đối tượng này có thể gọi và lấy dữ liệu từ table ra rất nhanh và dễ dàng ở bài Tìm hiểu đối tượng WP_Query trong WordPress thì tôi sẽ đọc document rồi hướng dẫn lại bạn theo cách của tôi, vì thế sẽ có nhiều sai sót trong code, nói trước để các bạn thông cảm và rộng lượng bỏ qua hen.

Bạn có thể vào đây để tìm hiểu thêm nếu như bài viết này không đáp ứng đầy đủ kiến thức mà bạn đang quan tâm.

1/ Cấu trúc folder plugin kenshin query

Như thường lệ, bất kì tôi thao tác một vấn đề nào đó trong WordPress thì tôi sẽ tạo mới một plugin để thực thi các thao tác cho nó tiện.

Cấu trúc plugin

kenshin-query – widgets – kenshin-query.php (File xử lý chính của plugin)

Nội dung file kenshin-query.php:

Bạn chú ý đoạn code gọi đến đường dẫn tuyệt đối để gọi đến file xử lý Widget.

Tôi sẽ giới thiệu đến bạn Hook Action wp_dashboard_setup, hook này sẽ xử lý đầu tiên và hiển thị dữ liệu ở page Dashboard trong vùng admin, ngoài ra phương thức wp_add_dashboard_widget() sẽ có nhiệm vụ hiển thị Widget trong vùng Dashboard chứ nó không nằm trong khu vực quản lý Widget.

Nội dung file widget-dashboard.php:

widget-dashboard

Phương thức display chính là nơi mà chúng ta sẽ gọi tới đối tượng WP_Query() để tương tác với database.

2/ Tương tác với đối tượng WP_Query()

Thông thường nếu bạn muốn lấy dữ liệu trong một table nào đó chẳng hạn như là table wp_post đi hen, nếu dùng biến toàn cục $wpdb để gọi tới các phương thức hỗ trợ như là get_results(), get_row()...vv việc này sẽ làm bạn tốn thời gian, nhưng với đối tượng WP_Query() thì bạn sẽ nhẹ nhàng hơn trong các thao tác gọi tới và show dữ liệu ra ngoài themes, thôi không nói nhiều nửa , xoắn tay áo lên và thực hành để nắm rõ bài hơn.

Tôi sẽ khai báo biến $wpQuery để khởi tạo đối tượng WP_Query() và sau đó in nó ra xem dữ liệu bên trong trả về là gì.

Đây là mảng dữ liệu được trả về.

Nhiều phần tử được trả về, nhìn vào bạn chẳng biết nó là gì đâu, lúc bấy giờ bạn chú ý tới phần tử posts, do kiểu dữ liệu là object(đối tượng) nên tôi sẽ gọi tới phần tử này như sau. Nhưng để làm được điều này thì bạn cần phải truyền tham số vào WP_Query(), tôi cho nó tham số là author=1 , tức là nó sẽ lấy ra các bài viết của tác giả có ID là 1 tức là admin đấy bạn.

Lưu ý: Bạn cần chuẩn bị một số bài viết với kiểu định dạng là post để có cái mà lấy ra nhé

wp-query-posts

Với đoạn code trên thì tôi đã gọi tới table WP_post trong database và nó nó lấy toàn bộ phần tử trong table đó, và hiển thị tất cả bai viết của author có ID là 1, do dữ liệu khá nhiều nên tôi không thể nào chụp bao quát toàn màn hình được, bạn hãy tự kiểm tra lấy.

Với author =1 thì tôi có tổng cộng là 9 bài viết, lúc này tôi muốn hiển thị tiêu đề của 9 bài viết trong cặp thẻ <ul và <li, vậy tôi thực hiện hành động này ra sao?

Lúc này ngay tại document tôi thấy phần Standard Loop (Tức là vòng lặp) với đối tượng WP_Query() mà bạn muốn show dữ liệu ra thì phải đi kèm với thằng The Loop.

standard-loop

Đây là đoạn code demo mà document cung cấp cho chúng ta, tôi sẽ copy và sửa lại theo ý tôi như sau, phương thức get_the_title() dùng để lấy ra tiêu đề bài viết. Chú ý tới phương thức the_post(), nếu vòng lặp không có nó sẽ thành một vòng lặp vô tận và làm trình duyệt của bạn bị treo, tôi sẽ giải thích kỹ hơn ở một bài khác. Còn phương thức have_posts() dùng để kiểm tra xem có bài viết hay không.

Với đoạn code trên thì tôi đã lấy ra được 9 bài viết thuộc quyền sở hữu của author = 1.

have-posts-the-posts

Lúc này tôi muốn gắn link vào tiêu đề bài viết và mỗi khi click vào link của từng tiêu đề thì sẽ gọi tới trang edit ứng với từng ID bài viết, vậy người nông dân phải làm thao ?

Đường dẫn sẽ có dạng là http://localhost/wp/wp-admin/post.php?post=25&action=edit, vậy thì để gọi tới đường dẫn tương đối tới url wp-admin thì WordPress cung cấp cho chúng ta phương thức admin_url(), vậy còn ID bài viết lấy ra bằng cách nào ?, lúc này tôi sẽ giới thiệu bạn thêm phương thức get_the_ID(), nó giúp bạn lấy ra ID của từng bài viết. Và tôi có đoạn code như sau.

Với đoạn code trên thì tôi đã thực hiện thành công việc gắn link vào từng tiêu đề bài viết, khi click vào sẽ nhảy tới trang edit của từng bài viết.

add-link-get-the-title-get-the-id

Lúc bấy giờ sẽ phát sinh ra một vấn đề, nếu tham số đưa vào đối tượng WP_Query() không tồn tại thì sẽ xuất hiện thông báo lỗi “Không có bài viết nào của tác giả này”, rất là đơn giản bạn chỉ cần else ở ngay phần if như sau.

Chỗ author = 1 bạn thay thế bất một ID bất kì, đại loại như là 123, sau đó F5 lại trình duyệt kiểm tra xem có xuất ra câu thông báo lỗi mà bạn vừa khai báo không.

2/ Lời kết

Còn rất nhiều phương thức & tham số nằm trong đối tượng WP_Query() mà tôi không thể nào trình bày hết được, tôi sẽ hướng dẫn bạn các phương thức còn lại ở một bài khác, như vậy thông qua bài Tìm hiểu đối tượng WP_Query() trong WordPress thì bạn đã phần nào thấy được sức mạnh và tầm quan trọng của nó ra sao. Chỉ cần sử dụng thành thạo nó sẽ rất có lợi cho bạn trong việc thiết kế giao diện về sau, bài viết chỉ ở mức căn bản nhưng nó chứa đựng đầy đủ nền tảng để bạn tự tìm hiểu thêm về đối tượng này.

Series Navigation

Last updated