Menu

Hướng dẫn query database wordpress toàn tập

Chào mừng bạn trở lại với chuyên mục khám phá sức mạnh của database WordPress. Trong bài viết hôm nay, chúng ta sẽ cùng nhau đi sâu vào kỹ thuật query database WordPress một cách chi tiết và hiệu quả nhất.

Thay vì sử dụng các phương pháp mặc định như WP_Query, chúng ta sẽ tập trung vào việc truy vấn trực tiếp, mở ra những khả năng tùy biến không giới hạn cho website của bạn. Để nắm bắt trọn vẹn nội dung bài viết, bạn cần có kiến thức cơ bản về MySQL. Nếu bạn là người mới bắt đầu, đừng lo lắng, đây là cơ hội tuyệt vời để bạn trau dồi thêm kỹ năng!

Hướng dẫn query database wordpress toàn tập

Hướng dẫn query database wordpress toàn tập

Hướng dẫn query dữ liệu database WordPress chi tiết

Trong phần này, chúng ta sẽ khám phá ba phương pháp query database WordPress quan trọng nhất, giúp bạn truy xuất dữ liệu một cách linh hoạt và tối ưu.

1. Get results – Lấy nhiều bản ghi trong query database WordPress

Phương thức get_results được sử dụng khi bạn cần lấy nhiều bản ghi từ một bảng. Hãy xem xét ví dụ sau, nơi chúng ta muốn truy xuất 10 bài viết mới nhất từ bảng wp_posts:

<?php
global $wpdb; // Biến toàn cục $wpdb được sử dụng trong khi tương tác với database wordpress
$limit = 10; // Số lượng record cần lấy
$offset = 0; // Số lượng record bỏ qua
$table = $wpdb->prefix . 'posts'; // Khai báo bảng cần lấy
$sql = "SELECT * FROM {$table} WHERE `post_type` = 'post' LIMIT %d OFFSET %d"; // cậu sql query 
$data = $wpdb->get_results( $wpdb->prepare($sql, $limit, $offset), ARRAY_A); // thực thi câu query, trả về dữ liệu trong biến $data
?>

Trong đoạn code trên:

  • Chúng ta sử dụng biến toàn cục $wpdb để tương tác với database WordPress.
  • $limit xác định số lượng bản ghi cần lấy (trong trường hợp này là 10).
  • $offset chỉ định số lượng bản ghi bỏ qua (ở đây là 0, tức là bắt đầu từ bản ghi đầu tiên).
  • $table chứa tên bảng cần truy vấn (wp_posts).
  • $sql là câu lệnh SQL để lấy dữ liệu, sử dụng %d làm placeholder cho các giá trị số.
  • Cuối cùng, $wpdb->get_results() thực thi câu truy vấn và trả về một mảng các mảng con, mỗi mảng con đại diện cho một bài viết.

Kết quả trả về là một mảng đa chiều, trong đó mỗi phần tử là một mảng chứa thông tin chi tiết của từng bài viết.

2. Get row – Lấy một bản ghi duy nhất query database WordPress

Ngược lại với get_results, get_row được sử dụng khi bạn chỉ cần lấy một bản ghi duy nhất, chẳng hạn như thông tin chi tiết của một bài viết cụ thể. Ví dụ:

<?php 
global  $wpdb;
$postID = 5; // id bài viết cần lấy
$table  = $wpdb->prefix . 'posts'; // Bảng cần lấy
$sql    = "SELECT * FROM {$table} WHERE `ID` = %d"; //câu sql query
$data   = $wpdb->get_row( $wpdb->prepare($sql, $postID), ARRAY_A); //trả về dữ liệu trong biến $data
?>

Đoạn code này sẽ lấy thông tin của bài viết có ID là 5. Dữ liệu trả về sẽ là một mảng duy nhất chứa thông tin chi tiết của bài viết đó.

3. Get var – Lấy một giá trị đơn query database WordPress

Trong trường hợp bạn chỉ cần lấy một giá trị duy nhất từ database WordPress, chẳng hạn như số lượng bài viết của một tác giả cụ thể, get_var là lựa chọn phù hợp. Dưới đây là một ví dụ:

<?php 
global $wpdb; 
$user_id = 1; // Đặt biết user_id
$table = $wpdb->prefix . 'posts'; // Bảng cần lấy 
$sql = "SELECT COUNT(*) FROM {$table} WHERE `post_author` = %d"; //câu sql query 
$number = $wpdb->get_var( $wpdb->prepare($sql, $user_id)); //trả về dữ liệu trong biến $number 
?>

Đoạn code này sẽ trả về số lượng bài viết của user có ID là 1, gán vào biến $number.

Ngoài ba phương pháp trên, WordPress còn cung cấp một số cách query database WordPress khác. Tuy nhiên, chúng ta sẽ tập trung vào ba phương pháp này để giúp bạn nắm vững những kiến thức cơ bản nhất.

Hướng dẫn join bảng và query dữ liệu database WordPress

Đôi khi, bạn cần kết hợp dữ liệu từ nhiều bảng khác nhau để đáp ứng yêu cầu truy vấn phức tạp hơn. Phần này sẽ hướng dẫn bạn cách thực hiện việc này.

1. Join một bảng query database WordPress

Bài toán: Lấy danh sách bài viết kèm theo tên tác giả.

Phân tích: Thông tin bài viết nằm trong bảng wp_posts, còn tên tác giả nằm trong bảng wp_users. Chúng ta cần kết hợp hai bảng này dựa trên cột post_author trong bảng wp_posts và cột ID trong bảng wp_users.

<?php 
global $wpdb; 
$user_id = 1;
$table_post = $wpdb->prefix . 'posts'; // Bảng post 
$table_user = $wpdb->prefix . 'users'; // Bảng bảng user
$limit = 10;
$offset = 0; 
$sql = "SELECT {$table_post}.`ID`, `post_title`, `post_date`, `display_name`
			FROM {$table_post}
			LEFT JOIN {$table_user} ON {$table_post}.`post_author` = {$table_user}.`ID`
			WHERE `post_status` = 'publish' AND `post_type` = 'post'
			LIMIT %d OFFSET %d"; //câu sql query 
$data = $wpdb->get_results( $wpdb->prepare($sql, $limit, $offset), ARRAY_A); //trả về dữ liệu trong biến $data 
?>

Đoạn code trên sẽ lấy ra 10 bài viết mới nhất, kèm theo các thông tin sau:

  • ID của bài viết
  • Tiêu đề bài viết
  • Ngày viết bài
  • Tên tác giả

Bạn có thể tùy chỉnh câu lệnh SELECT để lấy thêm các thông tin khác nếu cần.

2. Join nhiều bảng

Bài toán: Lấy danh sách bài viết kèm theo tên tác giả và mô tả về tác giả.

Phân tích: Tương tự như trên, chúng ta cần kết hợp bảng wp_postswp_users. Tuy nhiên, mô tả về tác giả lại nằm trong bảng wp_usermeta. Do đó, chúng ta cần join thêm bảng này.

<?php 
global $wpdb; 
$user_id = 1;
$table_post = $wpdb->prefix . 'posts'; // Bảng post 
$table_user = $wpdb->prefix . 'users'; // Bảng bảng user
$table_usermeta = $wpdb->prefix . 'usermeta'; // User meta
$limit = 10;
$offset = 0; 
$sql = "SELECT {$table_post}.`ID`, `post_title`, `post_date`, `display_name`, {$table_usermeta}.`meta_value` as description
			FROM {$table_post}
			LEFT JOIN {$table_user} ON {$table_post}.`post_author` = {$table_user}.`ID`
			LEFT JOIN {$table_usermeta} ON {$table_usermeta}.`user_id` = {$table_user}.`ID`
			WHERE `post_status` = 'publish' AND `post_type` = 'post' AND {$table_usermeta}.`meta_key` = 'description'
			LIMIT %d OFFSET %d"; //câu sql query 
$data = $wpdb->get_results( $wpdb->prepare($sql, $limit, $offset), ARRAY_A); //trả về dữ liệu trong biến $data 
?>

Trong ví dụ này, chúng ta join bảng wp_usermeta thông qua cột user_id, và sử dụng bí danh (alias) description cho cột meta_value để dễ dàng truy xuất dữ liệu.

Tổng kết

Trong bài viết này, bạn đã được hướng dẫn chi tiết cách query database WordPress một cách hiệu quả. Kỹ thuật này đặc biệt hữu ích khi bạn tạo bảng mới trong database wordpress và cần truy xuất dữ liệu từ bảng đó.

Để bảo mật WordPress, bạn có thể tham khảo thêm Bảo mật WordPress 2026: 8 plugin chống tấn công lượng tử

Ưu điểm của việc query database trực tiếp:

  • Tốc độ truy xuất dữ liệu nhanh, giúp tăng tốc độ tải trang và cải thiện hiệu suất website.
  • Khả năng truy xuất dữ liệu từ bất kỳ bảng nào trong database WordPress.
  • Không phụ thuộc vào các hàm mặc định của WordPress, mang lại sự linh hoạt cao hơn.
  • Cú pháp truy vấn quen thuộc, tương tự như trong PHP thuần.

Nhược điểm:

  • Tốn thời gian viết code.
  • Yêu cầu kiến thức về MySQL và cấu trúc database của WordPress.
  • Nguy cơ bị tấn công SQL injection nếu không có kiến thức bảo mật tốt.

Để tìm hiểu sâu hơn về query database WordPress, bạn có thể tham khảo tài liệu chính thức tại đây: Class wpdb.

Chúc bạn thành công trên con đường chinh phục WordPress!

FAQ: Những Câu Hỏi Thường Gặp Về Query Database WordPress

Tại sao nên Query Database WordPress trực tiếp thay vì dùng WP_Query?

Query trực tiếp cho phép tùy biến cao, truy xuất dữ liệu nhanh và không phụ thuộc vào hàm mặc định, giúp tăng tốc độ website.

Cần những kiến thức gì để Query Database WordPress hiệu quả?

Bạn cần có kiến thức cơ bản về MySQL và hiểu cấu trúc database của WordPress.

Phương thức `get_results` trong Query Database WordPress dùng để làm gì?

`get_results` dùng để lấy nhiều bản ghi (nhiều hàng) từ một bảng trong database.

Khi nào nên sử dụng phương thức `get_row` để Query Database WordPress?

Sử dụng `get_row` khi bạn chỉ cần lấy một bản ghi duy nhất (một hàng) từ database.

Phương thức `get_var` trong Query Database WordPress dùng để làm gì?

`get_var` dùng để lấy một giá trị đơn lẻ từ database, ví dụ như đếm số lượng bài viết.

Làm thế nào để Join nhiều bảng khi Query Database WordPress?

Sử dụng câu lệnh `LEFT JOIN` (hoặc các loại JOIN khác) trong SQL để kết hợp dữ liệu từ nhiều bảng dựa trên các cột liên quan.

Query Database WordPress trực tiếp có nhược điểm gì không?

Có, tốn thời gian viết code, yêu cầu kiến thức chuyên môn và có nguy cơ bị tấn công SQL injection nếu không cẩn thận.

Biến toàn cục `$wpdb` có vai trò gì trong Query Database WordPress?

Biến `$wpdb` là một đối tượng toàn cục cho phép bạn tương tác và thực hiện các truy vấn trực tiếp vào database WordPress.

Bài trước Tạo bảng trong database cho plugin trong WordPress Bài tiếp theo Thêm menu admin và sub menu admin trong wordpress

Đánh giá từ khách hàng

Tổng hợp trải nghiệm thực tế từ khách đã lưu trú.

5,0 /5

Tuyệt vời

9 đánh giá

Tuyệt vời
9
Rất tốt
0
Trung bình
0
Tạm được
0
Tệ
0
Chất lượng nội dung
5,0
Áp dụng thực tế
5,0
Trình bày bài viết
5,0
Giá trị kiến thức
5,0
NL

Nguyễn Thị Hương Lan

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết rất chi tiết, có cả ưu điểm và nhược điểm của việc query trực tiếp database. Mình thấy cái nhược điểm về bảo mật SQL injection cũng đáng lo ngại. Chắc phải tìm hiểu kỹ hơn về vấn đề này trước khi áp dụng. Cảm ơn ad đã cảnh báo!

PT

Phan Thanh Tâm

Đã đánh giá vào 14/02/2026

5,0 /5

Em là newbie mới vào nghề, đọc bài này thấy kiến thức mở mang hẳn ra. Trước giờ cứ nghĩ WordPress chỉ có WP_Query thôi chứ. Cho em hỏi là nếu dùng query trực tiếp như này thì có cần phải sanitize dữ liệu để tránh SQL injection không ạ?

VA

Vũ Đức Anh

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết chất lượng! Ví dụ code rõ ràng, dễ áp dụng. Mình thích nhất là phần join bảng, rất hữu ích cho việc tạo các báo cáo phức tạp. Thanks tác giả!

HM

Hoàng Thị Mai

Đã đánh giá vào 14/02/2026

5,0 /5

Mình dân marketing, không rành code lắm nhưng đọc bài này cũng hiểu được phần nào. Thấy bảo query trực tiếp database nhanh hơn, để mình bảo team dev áp dụng thử xem có cải thiện được tốc độ website không. Thanks ad!

ĐB

Đặng Quốc Bảo

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết rất đầy đủ và dễ hiểu. Mình là dân kỹ thuật nên đọc hiểu nhanh. Thanks ad đã chia sẻ kiến thức!

PH

Phạm Thu Hà

Đã đánh giá vào 14/02/2026

5,0 /5

Mình thấy cái đoạn lấy thông tin tác giả kèm mô tả hay quá. Website mình đang thiếu cái này. Để mình áp dụng thử xem sao. Cảm ơn bạn nhiều nha!

LT

Lê Văn Tèo

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết hay! Đoạn join bảng rất hữu ích, mình đang cần cái này để làm cái thống kê phức tạp cho website. Thanks ad!

NN

Nguyễn Hoàng Nam

Đã đánh giá vào 14/02/2026

5,0 /5

Trước giờ toàn dùng WP_Query, đọc bài này mới biết có thể query trực tiếp database. Đúng là mở ra chân trời mới. Để thử áp dụng vào project xem sao. Cho mình hỏi là khi query trực tiếp như này thì có ảnh hưởng đến việc cache của WordPress không nhỉ?

TB

Trần Thị Bích

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết quá chi tiết luôn! Mình mới tập tành làm quen với WordPress, đọc xong bài này thấy tự tin hẳn lên. Mấy cái ví dụ code rõ ràng, dễ hiểu. Cảm ơn tác giả nhiều ạ!

Viết đánh giá của bạn

Vui lòng đăng nhập để gửi đánh giá.
Chất lượng nội dung
Áp dụng thực tế
Trình bày bài viết
Giá trị kiến thức

Tối đa 5 ảnh, mỗi ảnh không quá 5MB.

    Tìm kiếm... Ctrl+K

    Kira ChatBox - Trợ lý AI