問題描述
我剛剛意識到,一個插件的傳統 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。