特定のユーザーのプラグインを無効にしたいのですが。 wp-content/plugin-mu
プラグインファイル内で次のコードを使用しています。
add_filter( 'option_active_plugins', 'bo_disable_apm_plugin' );
function bo_disable_apm_plugin( $plugins ) {
global $current_user;
// Not use advanced page manager for media manager
if ( is_admin() && in_array( 'media_manager', $current_user->roles ) ) {
$key = array_search( 'advanced-page-manager/advanced_page_manager.php' , $plugins );
if ( false !== $key ) {
unset( $plugins[$key] );
}
}
return $plugins;
}
もちろん、うまくいきません。 option_active_plugins
のやり方がわかりません。データをダンプすることで、コードが7回実行されていることがわかりました。
最初のループでは、ユーザーは知らないので、条件は満たされません。プラグインはまだアクティブ化されています。
私は3つの条件付きでもっと複雑なコードを追加しました:ユーザが設定されていないならプラグインの設定を解除します、それでプラグインは最初のループで毎回無効になります。ユーザーが設定されている場合(次のループ)、それに応じてプラグインを設定または設定解除するために彼を確認してください。どちらも働いていませんでした。
私は正しい式を見つけることができなかったので、多分私はどこかが間違っていてそれをすることができません。毎回、プラグインはすべてのユーザーに対して有効化または無効化されます。最初の繰り返しが重要なもののようです。
特定のユーザー/グループのプラグインを無効にする方法はありますか?
私はこの{ テーマによるプラグイン/プラグインアクションの無効化 に対する答えが、コードからプラグインを無効にする方法についての基本的な知識に役立つと思います。
あなたのニーズにその知識を適応させることはこれで私たちを残します:
add_action('admin_init', 'my_filter_the_plugins');
function my_filter_the_plugins()
{
global $current_user;
if (in_array('media_manager', $current_user->roles)) {
deactivate_plugins( // deactivate for media_manager
array(
'/advanced-page-manager/advanced_page_manager.php'
),
true, // silent mode (no deactivation hooks fired)
false // network wide
);
} else { // activate for those than can use it
activate_plugins(
array(
'/advanced-page-manager/advanced_page_manager.php'
),
'', // redirect url, does not matter (default is '')
false, // network wise
true // silent mode (no activation hooks fired)
);
}
}
基本的にこれは起こります:
media_manager
ユーザーグループの場合、my_filter_the_plugins
はadvanced-page-manager
プラグインを無効にします( 静かに )。それからmedia_manager
ユーザーグループに属していないもののためにプラグインを再びアクティブにする必要があります( 黙って )。
あなたは基本的にあなたがwordpressの "ブート"時に持っている情報に基づいてプラグイン全体を無効にすることができます、それは基本的にURLとクッキーです。それよりも複雑なチェックは、おそらく起動が完了するまで待たなければならず、その時点でプラグインはすでにロードされていて「無効化」するには遅すぎます。