Почему я не могу удалить таблицы после удаления плагина в wp?

В uninstall.php у меня есть эта часть кода, когда я удаляю свой плагин после него, я вижу, что в моей базе данных у меня есть все мои таблицы плагинов:

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

Покажите нам, что показывает ваш $wpdb->show_errors().

Danon 10.08.2018 14:27

Вы используете ограничения внешнего ключа? Отображение структуры таблицы, вероятно, поможет.

jeroen 10.08.2018 14:28

Вы должны использовать свой код удаления таким образом developer.wordpress.org/plugins/the-basics/uninstall-methods

Shashank Sharma 10.08.2018 14:36

Как я могу показать всю структуру моих таблиц, да, я использую внешний ключ в нескольких таблицах

Ashot Navasardyan 10.08.2018 14:38

Хорошо, я нашел свою проблему, я изменил порядок своих запросов, и он работает

Ashot Navasardyan 10.08.2018 14:45

Можете ли вы опубликовать свое решение в качестве ответа? Это помогает другим людям, которые могут столкнуться с той же проблемой.

Nico Haase 10.08.2018 14:47

Да конечно, мой ответ ниже

Ashot Navasardyan 10.08.2018 14:56
0
7
313
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пользователь выполняет следующую команду для принудительного удаления таблиц:

SET foreign_key_checks = 0;
drop table ...
SET foreign_key_checks = 1;
Ответ принят как подходящий

Сначала вы должны удалить родительские таблицы, потому что, если вы сначала удалите свою родительскую таблицу, ваши дочерние таблицы не смогут найти родительский по внешнему ключу, это мой код после изменения

$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."`");

Другие вопросы по теме