-WP Multisite-删除博客时如何删除插件数据库表?

时间:2012-01-15 22:53:03

标签: php mysql wordpress

有没有办法在删除博客时删除插件数据库表?正如我所观察到的,只删除了默认的wordpress数据库表,但没有删除插件生成的表。

请帮忙。

1 个答案:

答案 0 :(得分:0)

我认为您必须为此编写自定义插件。在“删除站点”过程中,您可以使用许多操作和过滤器。你应该特别注意的是:

wp-admin/includes/ms.php Line 86:
$drop_tables = apply_filters( 'wpmu_drop_tables', $wpdb->tables( 'blog' ) );

因此,在您的自定义插件中,直接解决麻烦的插件表。添加类似的内容,

function remove_plugin_xyz_tables($tables) {
   global $wpdb;
   $id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
   $tables[] = $wpdb->get_blog_prefix($id).'table_xyz';
   return $tables;
}
add_filter('wpmu_drop_tables', 'remove_plugin_xyz_tables');

一些警告:我不知道如果表不存在,WordPress将如何处理这种情况,所以你想测试它,你可能想先检查它是否存在和/或是否存在插件处于活动状态和/或检查它是否已在阵列中。这还要求您为每个麻烦的插件添加一行,并假设插件已正确地为其表添加前缀。另一种方法是'SHOW TABLES LIKE "'.$wpdb->get_blog_prefix($id).'%"并将您的结果与WP已知的内容合并。最后,我没有测试任何这个,所以这段代码只是为了指导你为自己开发一个可靠的解决方案。

无论如何,一旦你的插件完成,网络激活它,它应该在删除网站时为你处理所有脏工作!

哦是的,并提醒插件作者注意问题。他/她可能不使用WPMS,甚至不知道这是一个问题。如果您有办法这样做,请编写补丁并将其提交给该人以保存他们的工作。开源FTW。

祝你好运〜