Đăng nhập

Hướng Dẫn Tạo Bảng Trong Plugin WordPress – Đúng Chuẩn, Chạy Một Lần Duy Nhất

Thành thạo cách tạo bảng trong cơ sở dữ liệu khi lập trình plugin WordPress – đảm bảo sạch, chuẩn và chỉ chạy một lần khi kích hoạt.

Tìm hiểu cách sử dụng register_activation_hook()$wpdb để tạo bảng trong WordPress plugin một cách an toàn và hiệu quả. Hướng dẫn đầy đủ, dễ hiểu cho cả người mới và lập trình viên nâng cao.


Giới thiệu

Khi bạn phát triển một plugin WordPress và cần lưu dữ liệu riêng biệt (ví dụ: đơn hàng, đánh giá, thông báo…), bạn sẽ cần tạo bảng mới trong cơ sở dữ liệu. Tuy nhiên, không thể để đoạn tạo bảng này chạy mỗi lần load trang — điều đó sẽ ảnh hưởng nghiêm trọng đến hiệu suất và an toàn.

Bài học hôm nay sẽ hướng dẫn bạn cách tạo bảng đúng chuẩn trong plugin, sử dụng $wpdbregister_activation_hook() để chỉ chạy một lần duy nhất – khi người dùng kích hoạt plugin.


Tư duy đúng: Chỉ tạo bảng khi plugin kích hoạt

Bạn nên gói toàn bộ logic tạo bảng vào một hàm, và gọi nó bằng hook register_activation_hook() – đây là hook chỉ chạy duy nhất một lần khi plugin được kích hoạt.


Bước 1: Viết hàm tạo bảng

function my_plugin_create_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'my_custom_table';

    if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
        $charset_collate = $wpdb->get_charset_collate();

        $sql = "CREATE TABLE $table_name (
            id mediumint(9) NOT NULL AUTO_INCREMENT,
            name varchar(100) NOT NULL,
            email varchar(100) DEFAULT '' NOT NULL,
            created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
            PRIMARY KEY  (id)
        ) $charset_collate;";

        require_once ABSPATH . 'wp-admin/includes/upgrade.php';
        dbDelta($sql);
    }
}

Giải thích:

  • global $wpdb; giúp bạn truy cập vào đối tượng database toàn cục của WordPress
  • SHOW TABLES LIKE để kiểm tra xem bảng đã tồn tại hay chưa
  • dbDelta() là hàm được WordPress thiết kế riêng để tạo bảng hoặc cập nhật bảng một cách an toàn

Bước 2: Gắn vào hook kích hoạt plugin

register_activation_hook(__FILE__, 'my_plugin_create_table');
  • __FILE__ trỏ đến file plugin chính (nơi khai báo hàm trên)
  • Hook này sẽ chạy chính xác một lần duy nhất khi plugin được kích hoạt

Bonus: Kiểm soát phiên bản bảng bằng add_option()

Nếu sau này bạn muốn cập nhật cấu trúc bảng (schema), bạn nên lưu phiên bản vào options để kiểm tra:

function my_plugin_check_db_version() {
    global $wpdb;
    $installed_ver = get_option('my_plugin_db_version');

    if ($installed_ver != '1.0') {
        my_plugin_create_table();
        update_option('my_plugin_db_version', '1.0');
    }
}
register_activation_hook(__FILE__, 'my_plugin_check_db_version');

Nếu là Theme thì sao?

Themes không có register_activation_hook() như plugin. Trong trường hợp đó, bạn dùng hook sau:

add_action('after_switch_theme', 'my_theme_create_table');

Hàm my_theme_create_table() sẽ hoạt động tương tự như phần plugin.


Tổng kết

Thành phầnVai trò
$wpdbĐối tượng thao tác database WordPress
dbDelta()Tạo và cập nhật bảng an toàn
register_activation_hook()Hook chạy duy nhất 1 lần khi kích hoạt plugin
get_option() / update_option()Quản lý phiên bản schema bảng
after_switch_themeHook tương tự cho theme

Kết luận

Việc tạo bảng trong WordPress không chỉ là kỹ thuật SQL – mà còn là tư duy an toàn, linh hoạt, và tuân thủ hệ sinh thái WordPress. Khi bạn hiểu rõ $wpdb, dbDelta, và register_activation_hook(), bạn sẽ thấy việc xây dựng plugin chuyên nghiệp dễ dàng hơn rất nhiều.

Nếu bạn cần mình hướng dẫn thêm về cách lưu dữ liệu, hiển thị bảng quản trị, hoặc CRUD form cho bảng vừa tạo – đừng ngại hỏi nhé!

Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.