플러그인 삭제시 데이터베이스에서 테이블 삭제


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.

하나의 테이블 만있는 경우이 코드를 사용하십시오.

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');

테이블이 두 개 이상인 경우이 코드를 사용하십시오.

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를 사용하는 경우

includes \ 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.