ワードプレスのプラグイン制作におきまして独自のデータベースを使用する場合、そのテーブルをプラグインの有効時に作成する方法を解説いたします。

1 プラグインを有効にユーザーがした時に処理を実行する

まず、プラグインをユーザーが実行した瞬間にデータベースのテーブルを作成する処理を実行します。こちらのコードは下記のようになります。

function do_when_plugin_activate() {
    global $wpdb;
    $db_version= '1.0';
    $table_name = $wpdb->prefix . 'mytable';// 1

    $sql = "CREATE TABLE ".$table_name." (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `test` varchar(32) CHARACTER SET utf8 NOT NULL,
        INDEX (test),
        PRIMARY KEY  (id)
    ) ".$wpdb->get_charset_collate().";"; // 2
    
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );

    add_option( 'my_db_version', $db_version );
}
register_activation_hook( __FILE__, 'do_when_plugin_activate' );

このコードは 1 ワードプレスのプレフィックス+mytable というテーブル名で、id,testというセルを持ったデータベースを作成し、testにはINDEX属性を付与します。

プラグインが有効化された際のフックはregister_activation_hook を利用します。

2 既にテーブルがある場合は作成しない

上記コードでは既にテーブルがある場合でも実行されてしまいますので、テーブルがあるかどうかを調べたうえでない場合だけ作成するようにします。

function do_when_plugin_activate() {
    global $wpdb;
    $db_version= '1.0';
    $table_name = $wpdb->prefix . 'mytable';// 1

  if($wpdb->get_var("SHOW TABLES LIKE '".$table_name."'") == $table_name) { //3
         return;
    }

    $sql = "CREATE TABLE ".$table_name." (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `test` varchar(32) CHARACTER SET utf8 NOT NULL,
        INDEX (test),
        PRIMARY KEY  (id)
    ) ".$wpdb->get_charset_collate().";"; // 2
    
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );

    add_option( 'my_db_version', $db_version );
}
register_activation_hook( __FILE__, 'do_when_plugin_activate' );

3の部分をコードに追加しました。このコードではテーブルの有無を確認し、ある場合はreturnで何もせずに処理を終わります。

WordPress ワードプレスのプラグインの開発・カスタマイズのご依頼・ご相談はWPドクターまでお気軽にお送りください