Cách custom table database riêng trong Wordpress

WordPress, một hệ thống quản lý nội dung (CMS), được nhiều người sử dụng để xây dựng website vì tính phổ biến, giao diện dễ sử dụng, hỗ trợ đa dạng từ blog cá nhân đến web doanh nghiệp với chi phí ít, thời gian nhanh.

Cấu trúc các bảng database mặc định của WP

WordPress hỗ trợ chúng ta custom nhiều thứ từ cms cho tới frontend, tuy nhiên nếu chúng ta nhìn vào cấu trúc database thì nó chỉ có 12 bảng, nếu chỉ gói gọn trong 12 bảng thì data trong cùng 1 bảng về lâu dài sẽ phình to ra ảnh hưởng ít nhiều đến tốc độ query của site.

Cấu trúc các bảng database mặc định của WP

Hình 1 – Cấu trúc các bảng database mặc định của WP

Vấn đề hiện tại

Một điểm quan trọng nữa là cách WordPress thực hiện query vẫn chưa được tối ưu. Ví dụ nếu chúng ta xem xét bảng posts và postmeta, khi cần trích xuất danh sách bài viết thỏa mãn 4 điều kiện lọc như đoạn mã dưới đây.

Hàm query của wordpress

Hình 2 – Hàm query của wordpress

Và in ra cấu trúc sql của câu query trên sẽ là

Cấu trúc sql sau khi đã in ra từ hàm query của wordpress

Hình 3 – Cấu trúc sql sau khi đã in ra từ hàm query của wordpress

Dựa trên ví dụ trước đó, chúng ta thấy WordPress đã thực hiện việc join đến bảng postmeta tới 4 lần. Khi có nhiều điều kiện hơn, số lần kết nối cũng tăng lên. Với bảng postmeta đã lớn và việc kết nối nhiều như vậy thì chắc chắn sẽ gây chậm site. 

Tại sao WordPress lại không giải quyết vấn đề này? 

Theo tôi, họ đã hiểu vấn đề từ lâu và chấp nhận nó vì mục tiêu ban đầu của họ là xây dựng các trang web về blog không có nhiều dữ liệu phức tạp. Hơn nữa, họ đang xây dựng một cơ sở dữ liệu phục vụ cho nhiều mục đích sử dụng, không thể tối ưu hóa trước một cấu trúc dữ liệu cụ thể và phải chấp nhận điều này.

Vậy có cách nào cải thiện nó không?

Nếu site của bạn trở nên chậm chạp hoặc bạn chuẩn bị build 1 site có tính năng phức tạp vượt ra ngoài wordpress hỗ trợ thì việc custom database riêng có thể là một giải pháp. Bằng cách này, bạn có thể:

  • Tối ưu hóa cấu trúc dữ liệu cho nhu cầu cụ thể của trang web, tăng tính linh hoạt và hiệu suất.
  • Tạo các tính năng hoặc chức năng riêng biệt không được hỗ trợ trong cơ sở dữ liệu chuẩn của WordPress.
  • Xây dựng một hệ thống quản lý phân quyền linh hoạt hơn để phù hợp với yêu cầu cụ thể của trang web.

Các bước tạo custom table

Bước 1: Tạo custom table sử dụng wordpress database api

Ví dụ chúng ta tạo thêm 1 bảng postmeta_custom trong cơ sở dữ liệu của WordPress theo code bên dưới.

Code tạo custom database

Hình 4 – Code tạo custom database

Database sẽ có thêm bảng mới

Hình 5 – Database sẽ có thêm bảng mới

Bước 2: Viết các lớp thêm sửa xoá cho phần database mới tạo 

Ngoài những hàm query wordpress đã build sẵn thì nó cũng cung cấp cho chúng ta những hàm cho phép thao tác trực tiếp vào database.

Link tham khảo: https://developer.wordpress.org/reference/classes/wpdb/

Viết lớp thêm/sửa/xoá cho bảng database mới

Hình 6 – Viết lớp thêm/sửa/xoá cho bảng database mới

Bước 3: Show data trong cms 

3.1  Nếu xem data là bảng phụ của bảng posts thì chúng ta có thể sử dụng action add_meta_boxes để show thông tin database custom và action save_post để lưu lại thông tin từ database custom.

Sử dụng add_meta_boxes/save_post để hiển thị và lưu thông tin database mới

Hình 7 – Sử dụng add_meta_boxes/save_post để hiển thị và lưu thông tin database mới

Khi post liên quan bị xoá thì thông tin từ bảng postmeta_custom mới này cũng bị xoá theo, có thể dùng hook before_delete_post của wordpress như sau

Xoá record liên quan nếu post cha bị xoá

Hình 8 – Xoá record liên quan nếu post cha bị xoá

3.2  Nếu xem data là bảng chính thì chúng ta có thể kế thừa lớp WP_List_Table để tạo ra danh sách data.

Link tham khảo: https://developer.wordpress.org/reference/classes/wp_list_table/

Tạo danh sách data kế thừa lớp WP_List_Table

Hình 9 – Tạo danh sách data kế thừa lớp WP_List_Table

Tới đây chúng ta đã xong phần setup quản lý từ bảng database mới. Phần còn lại là chúng ta sử dụng query của lớp $wpdb để tiến hành query bên ngoài frontend theo yêu cầu của khách hàng.

無料相談・お問い合わせ
insightscanXのお問い合わせもこちらからお願いします。
2025年1月からフリートライアル募集中
ご相談やお見積もりは全て 無料 で対応いたします。

    「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
    入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
    無料相談・お問い合わせ
    insightscanXのお問い合わせもこちらからお願いします。
    2025年1月からフリートライアル募集中
    ご相談やお見積もりは全て 無料 で対応いたします。

      「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
      入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
      無料相談
      お問い合わせ