Wordpress

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

Ở 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é!

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ò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.

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ẻ!

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...)

View Comments

  • 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... ?? tối về viết blog...
    Sức có hạn mà Anh tâm huyết và chia sẽ kinh nghiệm với mọi người
    Cảm ơn Anh

  • Hay quá bạn. Đúng cái mình đang cần luôn. Cám ơn bạn đã chia sẻ. Tiện thể, bạn có xuất bản thêm bài viết hiển thị dữ liệu của table wp_contacts trong trang quản trị không ah !

  • Ví dụ mình muốn thêm 1 trường vào 1 bảng post blog chẳng hạn. vậy thì mình cần làm gì nữa để cho admin và hiễn thị chạy được vậy nhỉ bạn ?

    • Bạn muốn thêm 1 cột vào bảng post phải ko? Wordpress nó ko hiểu và chạy cái cột đó đâu. Bạn phải code ví duj như dùng một số cái action như save_post

Recent Posts

Cafe với Anh Huy nghe kể chuyện hành trình fonttiengviet.com

Fonttiengviet.com là một dự án website do JKS thực hiện cho khách hàng Huy Academy.…

9 tháng ago

Giới thiệu thiết kế web Quảng Nam Web – quangnamweb.com

Chắc chắn nhiều anh em khi đọc bài viết này sẽ nghĩ tôi đang quảng…

10 tháng ago

Hướng dẫn viết widget bài viết theo chuyên mục trong wordpress

Widget trong WordPress là một công cụ mạnh mẽ cho phép bạn dễ dàng thêm…

12 tháng ago

Tạo website để viết blog với chi phí thấp nhất ai cũng làm được

Hôm nay mình sẽ hướng dẫn cho anh em cách tạo website blog cực kỳ…

12 tháng ago

WordPress có cùi bắp? Có sống tốt với nghề thiết kế website wordpress?

Sống cực tốt anh em ạ :D Sau nhiều năm gắng bó với nghề thiết…

1 năm ago

Share mẫu website blog cá nhân cực nhẹ, giống hocwordpress.vn

Nhân dịp quay lại viết blog mình share cho anh em code mẫu website blog…

1 năm ago