我刚刚意识到,uninstall.php
带有插件的传统文件无法在Multisite中使用。
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
exit();
delete_option( 'plugin_option_name' );
这不会删除所有wp_SITE-ID_options
表中的子站点选项。
是否有执行此操作的标准方法?
我刚刚意识到,uninstall.php
带有插件的传统文件无法在Multisite中使用。
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
exit();
delete_option( 'plugin_option_name' );
这不会删除所有wp_SITE-ID_options
表中的子站点选项。
是否有执行此操作的标准方法?
Answers:
uninstall.php
在我的硬盘中所有文件中进行搜索后,我发现两个文件具有以下功能is_multisite()
:用户角色编辑器和将代码添加到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.php
不会总是从博客ID == 1运行吗?
switch_to_blog(1)
的时候,我们有restore_
功能......不记得确切位置,我读了一些关于改变主博客实例...
uninstall.php
只有在以下情况下才能调用插件中的文件:1)在激活插件之前就已存在该文件(如果这样,则插件名称将存储在博客的选项表中);2)get_option('uninstall_plugins')
实际调用时会产生该特定插件。它似乎在Multisite上不起作用,因为网络范围内的插件信息存储在sitemeta
表中。
restore_current_blog
而不是存储当前博客ID并稍后再切换