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 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. $limitxác định số lượng bản ghi cần lấy (trong trường hợp này là 10).$offsetchỉ đị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).$tablechứa tên bảng cần truy vấn (wp_posts).$sqllà câu lệnh SQL để lấy dữ liệu, sử dụng%dlà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_posts và wp_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.