Tạo bảng mới 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.

Đ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: & tạo database khi active plugin:

add_action( 'after_switch_theme', 'hk_CreatDatabaseContacts' );

function detect_plugin_activation( $plugin, $network_activation ) {
    
}
add_action( 'activated_plugin', 'detect_plugin_activation', 10, 2 );

Last updated