卸载WP中的插件后,我无法删除表,为什么?

时间:2018-08-10 12:24:11

标签: php wordpress

uninstall.php中,我具有这部分代码,当我删除其后的插件时,我发现在db中我具有所有的插件表:

<?php
function my_plugin_remove_database()
{
    global $wpdb;
    $quiz_categories_table      =   $wpdb->prefix . 'aysquiz_quizcategories';
    $quizes_table               =   $wpdb->prefix . 'aysquiz_quizes';
    $questions_table            =   $wpdb->prefix . 'aysquiz_questions';
    $question_categories_table  =   $wpdb->prefix . 'aysquiz_categories';
    $answers_table              =   $wpdb->prefix . 'aysquiz_answers';
    $reports_table              =   $wpdb->prefix . 'aysquiz_reports';
    $themes_table               =   $wpdb->prefix . 'aysquiz_themes';
    $wpdb->query("DROP TABLE IF EXISTS `".$quiz_categories_table."`");
    $wpdb->query("DROP TABLE IF EXISTS `".$quizes_table."`");
    $wpdb->query("DROP TABLE IF EXISTS `".$questions_table."`");
    $wpdb->query("DROP TABLE IF EXISTS `".$question_categories_table."`");
    $wpdb->query("DROP TABLE IF EXISTS `".$answers_table."`");
    $wpdb->query("DROP TABLE IF EXISTS `".$reports_table."`");
    $wpdb->query("DROP TABLE IF EXISTS `".$themes_table."`");
}

register_uninstall_hook( __FILE__, 'my_plugin_remove_database' );

2 个答案:

答案 0 :(得分:0)

用户以下命令用于强制删除表:

SET foreign_key_checks = 0;
drop table ...
SET foreign_key_checks = 1;

答案 1 :(得分:0)

首先必须删除父表,因为如果要先删除父表,则子表无法通过外键找到父表,这是更改后的代码

$wpdb->query("DROP TABLE IF EXISTS `".$answers_table."`");
$wpdb->query("DROP TABLE IF EXISTS `".$questions_table."`");
$wpdb->query("DROP TABLE IF EXISTS `".$quizes_table."`");
$wpdb->query("DROP TABLE IF EXISTS `".$reports_table."`");
$wpdb->query("DROP TABLE IF EXISTS `".$themes_table."`");
$wpdb->query("DROP TABLE IF EXISTS `".$quiz_categories_table."`");
$wpdb->query("DROP TABLE IF EXISTS `".$question_categories_table."`");