web-dev-qa-db-ja.com

プラグインを削除するときにデータベースからテーブルを削除する

私はプラグインを作成し、ユーザーが自分のプラグインを削除したときにデータベースから自分のテーブルを削除する機能を追加したいと思います。ユーザーがプラグインを無効にしたときに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' );

ご覧のとおり、この関数はプラグインが無効になったときにテーブルを削除しますが、プラグインが削除されたときにもそうする必要があります。

9
Zzuum

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ファイルは、プラグインが削除されたときに呼び出されます。

17
johnh10

ここにコードを入力してください:

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");
}   
5
user106916

データベースからテーブルを削除するには、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/ /

0
Gufran Hasan