uninstall.phpプラグインに沿った従来のファイルがマルチサイトで機能しないことに気づきました。
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
exit();
delete_option( 'plugin_option_name' );
これにより、すべてのwp_SITE-ID_optionsテーブルのサブサイトオプションが削除されるわけではありません。
これを行うための標準的な方法はありますか?
uninstall.phpプラグインに沿った従来のファイルがマルチサイトで機能しないことに気づきました。
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
exit();
delete_option( 'plugin_option_name' );
これにより、すべてのwp_SITE-ID_optionsテーブルのサブサイトオプションが削除されるわけではありません。
これを行うための標準的な方法はありますか?
回答:
すべての内部で検索uninstall.php私は私のハードドライブに、私は機能を持っていた2を発見したしたことをファイルis_multisite():ユーザロールエディタと頭にコードを追加します。
どちらも$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')実際に呼び出すと、特定のプラグインが生成されます。sitemeta代わりに、ネットワーク全体のプラグイン情報がテーブルに格納されているため、マルチサイトでは機能しないようです。
restore_current_blog現在のブログIDを保存して後で切り替えるのではなく、使用を保留します