Cách đúng nhất để tạo thêm table cho WordPress

Cập nhật lần cuối vào

Nếu bạn muốn tạo thêm table trong cơ sở dữ liệu của WordPress thì bạn phải làm theo nguyên tắc. Bài viết này sẽ hướng dẫn cho các bạn cách thêm 1 table bất kỳ vào cơ sở dữ liệu của WordPress. Nếu như bạn dùng cho plugin thì bạn nên đặt vào hook activation của WordPress nhé.

global $wpdb;

$charset_collate  = $wpdb->get_charset_collate();
$max_index_length = 191;

$table = $wpdb->prefix . 'hocwpmeta';

$wpdb->hocwpmeta = $table;

$sql = "CREATE TABLE IF NOT EXISTS $table (meta_id bigint(20) unsigned NOT NULL auto_increment, ";
$sql .= "hocwp_id bigint(20) unsigned NOT NULL default '0', meta_key varchar(255) default NULL, ";
$sql .= "meta_value longtext, object_type varchar(20) default 'post', ";
$sql .= "PRIMARY KEY (meta_id), KEY hocwp_id (hocwp_id), ";
$sql .= "KEY meta_key (meta_key($max_index_length))) $charset_collate;";

if ( ! function_exists( 'dbDelta' ) ) {
	require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
}

dbDelta( $sql );

Như các bạn thấy. Trong ví dụ bên trên mình tạo thêm table có tên là hocwpmeta. Nghĩa là sau khi thêm table prefix thì sẽ có dạng wp_hocwpmeta. Thay vì sử dụng hàm PHP bình thường để truy vấn thì bạn phải dùng hàm dbDelta để tạo table.

Cách đúng nhất để tạo thêm table cho WordPress

Biến toàn cục $wpdb là để bạn tương tác với cơ sở dữ liệu. Bạn có thể dùng biến này để tạo bảng, truy xuất dữ liệu. Mọi thao tác trực tiếp với cơ sở dữ liệu bạn nên dùng biến $wpdb để thực hiện.

// 1st Method - Declaring $wpdb as global and using it to execute an SQL query statement that returns a PHP object

global $wpdb;
$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );

// 2nd Method - Utilizing the $GLOBALS superglobal. Does not require global keyword ( but may not be best practice )

$results = $GLOBALS['wpdb']->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );

Bên trên là một ví dụ trường hợp các bạn sử dụng class wpdb để truy vấn dữ liệu. Ngoài các hàm hỗ trợ truy vấn có sẵn của WordPress. Nếu bạn muốn truy vấn bằng câu lệnh MySQL thì các bạn nên làm như ví dụ bên trên để đảm bảo tính dễ sử dụng, tính đồng bộ và tính an toàn cho trang web của bạn. Chúc bạn thành công.

Gỡ bỏ option và table khi xóa plugin

Nếu bạn tạo plugin có thêm table cho WordPress. Khi ngừng kích hoạt hoặc xóa plugin thì bạn nên viết code gỡ bỏ table của bạn đi.

register_uninstall_hook( __FILE__, 'hocwp_on_plugin_deactivation' );
function hocwp_on_plugin_deactivation() {
	if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
		die;
	}

	$option_name = 'hocwp_option';

	// For single site option
	delete_option( $option_name );
	
	// For multisite option
	delete_site_option( $option_name );

	// Drop table from database
	global $wpdb;
	$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}hocwpmeta" );
}

Hàm bên trên sẽ gỡ bỏ option và xóa table ra khỏi cơ sở dữ liệu khi người dùng xóa plugin. Bạn có thể tham khảo thêm Activation / Deactivation HooksUninstall Methods trên trang chủ của WordPress nhé. Chúc bạn thành công.

Theo dõi
Thông báo của
guest

8 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Phan Hùng
6 năm trước

Bác cho luôn code xóa tab khi mình xóa plugin đó đi được không?

Truong Dinh Chien
6 năm trước

Cái tạo page rederect link này : https://hocwp.net/?goto=https://developer.wordpress.org/plugins/the-basics/activation-deactivation-hooks/
đặt quảng cáo không sợ bị baned hả bác Cường.

Truong Dinh Chien
6 năm trước

Thì ko đặt quảng cáo trên trang ít nội dung, ở đây có dòng chữ mà 2 cái quảng cáo lận bác…e định làm như bác mà sợ baned cái tài khoản

vi đình tuấn
4 năm trước

em mới nhận web muốn tạo 1 cái bảng cho web mà không biết chèn code vào chỗ nào có bác nào chỉ em với. Plugin em không thích dùng ạ

halina
4 năm trước

có abcs nào cho em xin code bảng giá cước với