問題描述

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