Hướng dẫn tạo bảng mới trong database wordpress

19/04/2019 Wordpress 9912 lượt xem
Lưu bài viết

Ở bài trước mình đã giới thiệu cho các bạn cấu trúc database wordpress và cũng đã biết database wordpress mặc định có tổng cộng là 12 bảng. Vậy chúng ta có thể tạo thêm vài bảng nữa được ko? Nếu được thì cách tạo như thế nào? rồi liên kết với các bảng có sẵn được hay không? Để trả lời các câu hỏi đó các bạn cùng đọc qua bài viết tạo bảng mới trong database wordpress của mình nhé!

tạo bảng mới trong database wordpress

Database mặc đinh của wordpress có 12 bảng

Tạo bảng mới trong database wordpress:

Ví dụ yêu cầu: Tạo một bảng mới trong database wordpress để lưu thông tin liên hệ của khách hàng. Thông tin liên hệ khách hàng gồm: Họ và tên, email, số điện thoại, địa chỉ, tiêu đề và nội dung liên hệ.

Với yêu cầu phía trên mình sẽ tạo một table mới có tên là: wp_contacts. Và trong table này sẽ có các trường tương ứng là: ID, name, email, phone, address, title, content, date.

Để tạo bảng mới trong database wordpress các bạn chèn đoạn code sau vào file functions.php của theme đang dùng nhé!

<?php 
    function hk_CreatDatabaseContacts(){
        global $wpdb;
        $charsetCollate = $wpdb->get_charset_collate();
        $contactTable = $wpdb->prefix . 'contacts';
        $createContactTable = "CREATE TABLE IF NOT EXISTS `{$contactTable}` (
            `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
            `name` varchar(255) NOT NULL,
            `email` varchar(255) NOT NULL,
            `phone` varchar(20) NULL,
            `address` varchar(255) NULL,
            `content` longtext NULL,
            `date` timestamp NOT NULL,
            PRIMARY KEY (`id`)
        ) {$charsetCollate};";
        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
        dbDelta( $createContactTable );
    }

    add_action('init', 'hk_CreatDatabaseContacts');
?>

Giải thích code tạo database mới trong wordpress:

Chúng ta tạo một hàm có tên là hk_CreatDatabaseContacts (bạn có thể đặt tên hàm tùy thích nhé). Sau đó móc hàm vừa vào action 'init' để mỗi khi load website là nó tự động chạy hàm đó. Sau đây là một số thành phần có trong hàm tạo database.

  • Dòng 3: global $wpdb => lớp $wpdb là lớp dùng để tương tác với database trong wordpress ( nói chung là cái này wordpress cung cấp sẵn để mình dùng :D )
  • Dòng 4: Get charset của database sau đó gán vào biến $charsetCollate, để tạo bảng mới cùng charset tổng thể của database.
  • Dòng 5: Đặt một biến $contactTable là tên của bảng cần tạo. $wpdb->prefix => Get prefix của database, mặt định của database là wp_
  • Từ dòng 6 đến dòng 15: Tạo biến $createContactTable là câu sql kiểm tra trong database có bảng đó chưa, nếu chưa có thì tiến hành tạo bảng mới. Với trường id là khóa chính, tự tăng.
  • Dòng 15: Iclude file hệ thống của wp, file này chứa nhiều thư viện giúp bạn tạo database. (Bạn cứ inlude vào ko cần quan tâm nhé)
  • Dòng 16: Sử dụng hàm dbDelta với biến $createContactTable được khai báo ở trên.

Xem kết quả:

Sau khi chèn đoạn có trên, bạn ra ngoài website và tiến hành reload lại trang và vào phpmyadmin xem kết quả, nếu xuất hiện bảng wp_contacts có nghĩa đoạn code trên đã chạy.

Hướng dẫn tạo bảng mới trong database wordpress

Bảng wp_contacs đã được tạo trong database của dự án

Đây là phần thiết kế của bảng vừa tạo

Tạo bảng mới trong database wordpress với khóa ngoại:

Các bạn chèn đoạn code sau vào file functions.php của theme đang dùng nhé!

<?php
function hk_CreatDatabaseContacts(){
    global $wpdb;
    $charsetCollate = $wpdb->get_charset_collate();
    $contactTable = $wpdb->prefix . 'contacts';
    $createContactTable = "CREATE TABLE IF NOT EXISTS `{$contactTable}` (
        `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
        `user_id` bigint(20) UNSIGNED NOT NULL,
        `name` varchar(255) NOT NULL,
        `email` varchar(255) NOT NULL,
        `phone` varchar(20) NULL,
        `address` varchar(255) NULL,
        `content` longtext NULL,
        `date` timestamp NOT NULL,
        PRIMARY KEY (`id`),
        FOREIGN KEY (user_id) REFERENCES {$wpdb->prefix}users(ID) ON DELETE CASCADE ON UPDATE CASCADE
    ) {$charsetCollate};";
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $createContactTable );
}

add_action('init', 'hk_CreatDatabaseContacts');
?>

Ở đây user_id là khóa ngoại, Liên kết bảng wp_contacts với bảng wp_users nha.

FOREIGN KEY (user_id) REFERENCES {$wpdb->prefix}users(ID) ON DELETE CASCADE ON UPDATE CASCADE

Đoạn code trên cho phép tạo khóa ngoại là user_id đồng thời ràng buộc khi xóa user A, thì những record ở bảng wp_contacs có chứa user_id của user A cũng bị xóa theo luôn nhé!.

Xóa một bảng trong database wordpress:

Để xóa một bảng trong database wordpress các bạn dùng đoạn code sau chèn vào file functions.php của theme đang dùng!

<?php
    global $wpdb;
    $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}contacts" );
?>

Một số lưu ý:

Khi các bạn tạo bảng mới trong database wordpress thì nên chạy 1 lần, tránh móc hàm tạo database vào action init. Vì action init mỗi lần load web nó sẽ chạy, vì thế action init chạy rất nhiều lần dễ gây lỗi và làm chậm website

Các bạn chỉ nên chạy khi active theme hoặc active plugin.

Tạo database khi active theme:

add_action( 'after_switch_theme', 'hk_CreatDatabaseContacts' );

Tạo database khi active plugin:

function detect_plugin_activation( $plugin, $network_activation ) {
    // Đoạn code tạo database
}
add_action( 'activated_plugin', 'detect_plugin_activation', 10, 2 );

Tóm lại:

Bài viết này mình đã hướng dẫn cho các bạn cách tạo bảng mới trong database của worpdress. Nhìn chung thì cũng khá đơn giản, chỉ cần copy đoạn code của mình chỉnh sửa các thông số cho phù hợp là oke. Ở bài viết tiếp theo mình sẽ hướng dẫn cho các bạn các query, thêm, xóa, sửa các dữ liệu trong table của database wordress bằng cậu lệnh query mysql.

Chào các bạn! Chúc các bạn học wordpress vui vẻ!