Разработка плагина для WordPress - Не удается удалить таблицу базы данных после деактивации плагина?

Я пытаюсь удалить таблицу базы данных, созданную при активации моего пользовательского плагина. Я использую в основном тот же код, просто запрос на удаление. Однако стол не упадет!

Я подтвердил следующее:

  • Пользователь базы данных WP имеет права на удаление таблиц (я подтвердил это, запустив sql-запрос в рабочей среде)
  • Запрос вызывается и является правильным (я использовал «die ($ sql)» для вывода запроса, а затем запустил его в рабочей среде)

    function my_plugin_remove_database() {
         global $wpdb;
         $table_name = $wpdb->prefix . "my_plugin_table";
         $sql = "DROP TABLE IF EXISTS $table_name;";
         //die($sql);
         require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
         dbDelta( $sql );
         delete_option("my_plugin_db_version");
    }
    register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
    

person JimmyJammed    schedule 31.05.2013    source источник


Ответы (1)


Используйте $wpdb->query() вместо dbDelta()

function my_plugin_remove_database() {
     global $wpdb;
     $table_name = $wpdb->prefix . "my_plugin_table";
     $sql = "DROP TABLE IF EXISTS $table_name;";
     $wpdb->query($sql);
     delete_option("my_plugin_db_version");
}

register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );

dbDelta() не поддерживает запрос DROP TABLE.

person Faishal    schedule 31.05.2013
comment
Большой! Работал отлично, не знал, что dbDelta не поддерживает Drop. Спасибо! - person JimmyJammed; 03.06.2013