问题描述
我刚刚意识到,一个插件的传统 uninstall.php
文件在 Multisite 中不起作用。
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
exit();
delete_option( 'plugin_option_name' );
这不会删除所有 wp_SITE-ID_options
表中的 sub-sites 选项。
有没有一个标准的方法来做到这一点?
最佳解决方案
搜索我在我的 hard-drive 中的所有 uninstall.php
文件,我发现有两个功能 is_multisite()
:User Role Editor 和 Add Code to Head 。
两者都使用 $wpdb
循环。简化:
<?php
/**
* Plugin Uninstall Procedure
*/
// Make sure that we are uninstalling
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
exit();
// Leave no trail
$option_name = 'plugin_option_name';
if ( !is_multisite() )
{
delete_option( $option_name );
}
else
{
global $wpdb;
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
$original_blog_id = get_current_blog_id();
foreach ( $blog_ids as $blog_id )
{
switch_to_blog( $blog_id );
delete_option( $option_name );
// OR
// delete_site_option( $option_name );
}
switch_to_blog( $original_blog_id );
}
相关问答答:Uninstall, Activate, Deactivate a plugin: typical features & how-to
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。