플러그인을 만들고 사용자가 플러그인을 삭제할 때 데이터베이스에서 테이블을 삭제하는 기능을 추가하려고합니다. 사용자가 플러그인을 비활성화 할 때 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
.
하나의 테이블 만있는 경우이 코드를 사용하십시오.
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/
답변
“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");
}
감사
답변
register_deactivation_hook
플러그인이 비활성화 될 때 작업을 수행하는 데 사용할 수있는 이 후크가 있다는 것을 알고 있습니다. 설명서를보고 원하는 내용인지 확인하십시오.
예를 들어 :
**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
Stuff
*/}
답변
불행히도 WordPress는 기능을 제공하지 않습니다. register_uninstall_hook 후크 만 지원합니다. 이 후크는 사용자가 플러그인 자체를 제거해야하는 설치 제거 링크를 클릭 할 때 호출됩니다. 플러그인이 동작에 연결되지 않으면 링크가 활성화되지 않습니다. http://codex.wordpress.org/Function_Reference/register_uninstall_hook 참조
그리고 register_deactivation_hook 훅. 대부분의 플러그인 개발자는 get_option, update_option을 사용하여 설정 테이블에 확인란을 추가합니다. 이 옵션을 선택하면 데이터가 제거됩니다.
이 방법으로 임시 비활성화는 플러그인의 옵션 테이블을 재설정하지 않습니다.