Ở 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
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'); ?>
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.
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
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 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" ); ?>
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 );
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ẻ!
Fonttiengviet.com là một dự án website do JKS thực hiện cho khách hàng Huy Academy.…
Chắc chắn nhiều anh em khi đọc bài viết này sẽ nghĩ tôi đang quảng…
Widget trong WordPress là một công cụ mạnh mẽ cho phép bạn dễ dàng thêm…
Hôm nay mình sẽ hướng dẫn cho anh em cách tạo website blog cực kỳ…
Sống cực tốt anh em ạ :D Sau nhiều năm gắng bó với nghề thiết…
Nhân dịp quay lại viết blog mình share cho anh em code mẫu website blog…
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
:D Cảm ơn bạn đã ghé thăm blog
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 !
Oke bạn! Để mình nghiên cứu làm 1 bài hướng dẫn về chủ đề này!
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