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

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.

6 bình luận cho “Cách đúng nhất để tạo thêm table cho WordPress

        1. Mình để cũng hơn 2 tháng rồi, không thấy bị gì. Nếu bạn sợ ban thì bạn cho thêm hiển thị bài viết vào.

Trả lời

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 *