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を保存して後で切り替えるのではなく、使用を保留します