Thực hành query dữ liệu database wordpress sử dụng wpdb
Hôm trước mình có giới thiệu cách truy vấn sql vào database wordpress để get dữ liệu, nhưng vẫn thấy chưa thấm lắm =)). Nên hôm nay mình và các bạn cùng nhau thực hành query dữ liệu database wordpress để hiểu hơn về cách query dữ liệu database wordpress
Mình sẽ lần lượt đưa ra các ví dụ yêu cầu, rồi sau đó sẽ giải quyết các vấn đề đó nha.
1. Truy vấn sql database wordpress get 10 bài viết mới nhất có hình đại diện
Phân tích: Như chúng ta đã biết bài viết được lưu trong bảng wp_posts, hình đại diện của bài viết lại lưu trong bảng wp_postmeta, nhưng ngặt ngèo ở chổ nó chỉ lưu id của hình dại diện chứ không phải là url của hình.
Vì thế để lấy ra được hình đại diện của bài post chúng ta phải query như sau: Từ wp_posts join bảng wp_postmeta để lấy ID của hình đại diện rồi tiếp tục join ngược lại bảng wp_posts để lấy url hình ảnh (Vì hình ảnh của wp được lưu trong bảng wp_posts).
Cụ thể chúng ta sẽ có đoạn code như sau:
<?php global $wpdb; $table = $wpdb->prefix . 'posts'; $tablemeta = $wpdb->prefix . 'postmeta'; $limit = 10; $offset = 0; $sql = "SELECT `post`.`ID`, `post`.`post_author` as author, `post`.`post_date` as date, `post`.`post_title` as title, `post`.`post_name` as slug, `imagethumb`.`guid` as image FROM $table as post LEFT JOIN $tablemeta as thumbnail ON `thumbnail`.`post_id` = `post`.`ID` AND `thumbnail`.`meta_key` = '_thumbnail_id' LEFT JOIN $table as imagethumb ON `imagethumb`.`ID` = `thumbnail`.`meta_value` WHERE `post`.`post_type` = 'post' AND `post`.`post_status` = 'publish' GROUP BY `ID` ORDER BY `date` DESC LIMIT %d OFFSET %d"; $data = $wpdb->get_results( $wpdb->prepare($sql, $limit, $offset), ARRAY_A); ?>
2. Truy vấn sql database wordpress get list danh mục với số lượng bài viết
Phân tích: Danh mục bài viết được lưu ở bảng wp_terms, nhưng số lượng bài viết của từng danh mục thì lại lưu ở bảng wp_term_taxonomy với yêu cầu này chúng ta từ bảng wp_terms join bảng wp_term_taxonomy sau đó get các thành phần tương ứng:
Cụ thể code như sau:
<?php global $wpdb; $limit = 100; $offset = 0; $tableterm = $wpdb->prefix . 'terms'; $tabletaxo = $wpdb->prefix . 'term_taxonomy'; $sql = "SELECT `term`.`term_id` as id, `term`.`name` as title, `term`.`slug` as slug, `tax`.`parent` as parent, `tax`.`count` as count FROM $tableterm as term LEFT JOIN $tabletaxo as tax ON `term`.`term_id` = `tax`.`term_id` WHERE `tax`.`taxonomy` = 'category' ORDER BY `term`.`term_id` DESC LIMIT %d OFFSET %d"; $data = $wpdb->get_results( $wpdb->prepare($sql, $limit, $offset), ARRAY_A); ?>
3. Truy vấn sql database wordpress get danh sách thành viết bình luận nhiều trong tháng
Đây là đoạn code được nhiều người cần để list top thành viên bình luận nhiều. Code này mình lấy top 10 thành viên bình luận nhiều nhất.
<?php $m = (string)date('m', time()); $y = (string)date('Y', time()); global $wpdb; $comments = $wpdb->get_results( "SELECT `comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`, `comment_author_url`, count(comment_author_email) As count FROM `wp_comments` WHERE comment_approved=1 AND `comment_date` LIKE '$y-$m%' Group by comment_author_email order by count DESC LIMIT 10" ); $data =(array)$comments; ?>
4. Get top thành viên viết bài nhiều nhất trong tháng
Bạn nào làm tổng kết báo cáo website chắc cần đoạn code này. Code get 10 thành viên viết bài nhiều nhất trong tháng
<?php $month = (string)date('m', time()); $year = (string)date('Y', time()); global $wpdb; $table_post = $wpdb->prefix . 'posts'; $table_user = $wpdb->prefix . 'users'; $query = "SELECT u.ID, u.display_name, u.user_email, count(post_title) as num FROM {$table_post} p JOIN {$table_user} u ON p.post_author = u.ID WHERE post_type='post' AND post_status='publish' AND YEAR(post_date)=%d AND MONTH(post_date)=%d GROUP BY post_author ORDER BY num DESC LIMIT 10"; $data = $wpdb->get_results( $wpdb->prepare( $query, $year, $month )); ?>
Tổng kết:
Bài hôm nay mình đã giới thiệu nhiều hơn về query dữ liệu từ database của wordpress. Một khi bạn đã thành thạo trong việc sử dụng class $wpdb thì wordpress không còn là vấn đề của bạn. Hy vọng bài viết này sẽ giúp ích cho bạn!
Bạn nào có cần đoạn code nào liên quan đến cách get dữ liệu wordpress mà chưa rõ thì comment cho mình biết mình sẽ giúp!. Các bạn có thể đọc qua bài viết này để biết các câu sql hay cần dùng cho wordpress
Chúc các bạn học wordpress thành công!
Võ Quang Huy (Huy Kira)
Đam mê hóa học, ưng thi vào trường kinh tế... Đậu vào trường Sư phạm, quyết tâm đi dạy... Ra trường đi làm designer, tự học frontend, chuyển qua làm PHP, được công ty đào tạo laravel... Và hiện tại đang code react native(2015) => Fullstack ... ?? tối về viết blog... (Còn tiếp...)