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


13

プラグインを作成し、ユーザーがプラグインを削除したときにデータベースからテーブルを削除する機能を追加したいと考えています。ユーザーがプラグインを非アクティブ化したときに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' );

ご覧のとおり、この関数はプラグインが非アクティブ化されたときにテーブルを削除しますが、プラグインが削除されたときに削除する必要があります。


register_uninstall_hookを試しましたか?
Andrew Bartel

答えてくれてありがとう..はい..私はそれを試して..何も起こらなかった..:/
Zzuum

回答:


23

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


8

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

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

2

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


ありがとう、私の日を守ってください:)
Arman H

0

「WORDPRESS PLUGIN BOILERPLATE GENERATOR」を使用している場合wppb

contains \ class -...- deactivator.phpに移動します

次のコードを書きます(必要に応じて変更してください)

global $wpdb;

    $tableArray = [
        $wpdb->prefix . "table1",
        $wpdb->prefix . "table2",
    ];
    foreach($tableArray as $table){
        $wpdb->query("DROP TABLE IF EXISTS $table");
    }

ありがとう


-1

私はこのフックが呼ばれていることを知っています: register_deactivation_hookいますプラグインが非アクティブ化されているときに何かを行うために使用できます。ドキュメントを見て、それがあなたが探しているものかどうかを確認してください。

例えば:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Stuff
*/}

-3

残念ながら、WordPressはそのための機能を公開していません。register_uninstall_hookフックのみをサポートします。このフックは、ユーザーがプラグイン自体をアンインストールするように要求するアンインストールリンクをクリックすると呼び出されます。プラグインがアクションにフックしない限り、リンクはアクティブになりません。見るhttp://codex.wordpress.org/Function_Reference/register_uninstall_hookをください

そしてregister_deactivation_hookフック。ほとんどのプラグイン開発者は、get_option、update_optionを使用して設定テーブルにチェックボックスを追加します。このオプションをオンにすると、データが削除されます。

このように、一時的な非アクティブ化はプラグインのオプションテーブルをリセットしません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.