私はプラグインを作成し、ユーザーが自分のプラグインを削除したときにデータベースから自分のテーブルを削除する機能を追加したいと思います。ユーザーがプラグインを無効にしたときにDBからテーブルを削除する関数を作成しましたが、それは望ましくありません。これがコードです:
// Delete table when deactivate
function my_plugin_remove_database() {
global $wpdb;
$table_name = "NestoNovo";
$sql = "DROP TABLE IF EXISTS $table_name;";
$wpdb->query($sql);
delete_option("my_plugin_db_version");
}
register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
ご覧のとおり、この関数はプラグインが無効になったときにテーブルを削除しますが、プラグインが削除されたときにもそうする必要があります。
WordPressのuninstall.phpサポートを使ってこれを行うことができます。
<?php
if( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) exit();
global $wpdb;
$wpdb->query( "DROP TABLE IF EXISTS NestoNovo" );
delete_option("my_plugin_db_version");
?>
このuninstall.phpファイルは、プラグインが削除されたときに呼び出されます。
ここにコードを入力してください:
register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
function my_plugin_remove_database() {
global $wpdb;
$table_name = $wpdb->prefix . 'NestoNovo';
$sql = "DROP TABLE IF EXISTS $table_name";
$wpdb->query($sql);
delete_option("my_plugin_db_version");
}
データベースからテーブルを削除するには、register_uninstall_hook
の代わりにregister_deactivation_hook
フックを使用する必要があります。
プラグインを無効にするとregister_deactivation_hook
が起動し、プラグインをregister_uninstall_hook
にしたい場合はremove/delete
が起動します。
テーブルが1つしかない場合は、このコードを使用してください。
function delete_plugin_database_table(){
global $wpdb;
$table_name = $wpdb->prefix . 'table_name';
$sql = "DROP TABLE IF EXISTS $table_name";
$wpdb->query($sql);
}
register_uninstall_hook(__FILE__, 'delete_plugin_database_table');
あなたが3つ以上のテーブルを持っているなら、あなたはこのコードを使う:
function delete_plugin_database_tables(){
global $wpdb;
$tableArray = [
$wpdb->prefix . "table_name1",
$wpdb->prefix . "table_name2",
$wpdb->prefix . "table_name3",
$wpdb->prefix . "table_name4",
];
foreach ($tableArray as $tablename) {
$wpdb->query("DROP TABLE IF EXISTS $tablename");
}
}
register_uninstall_hook(__FILE__, 'delete_plugin_database_tables');
参照リンク
https://developer.wordpress.org/reference/functions/register_uninstall_hook/https://developer.wordpress.org/plugins/plugin-basics/uninstall-methods/ /