我想停用特定用户的插件。我在一个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次。
在第一个循环中,用户不知道,因此不满足条件。插件仍处于激活状态。
我添加了一个更复杂的代码,其中包含三个条件:如果未设置用户,则取消设置插件,因此每次在第一个循环中都会停用插件。如果用户已设置(下一个循环),请检查他是否相应地设置/取消设置插件。也不起作用。
我没有找到正确的公式,所以也许我在某个地方错了,这是不可能做到的。每次都会为所有用户激活或停用插件。看起来第一次迭代很重要。
有没有办法停用特定用户/组的插件?
最合适的回答,由SO网友:aifrim 整理而成
我想答案是Disable plugin / plugin action via theme 有助于了解如何从代码中禁用插件。
根据您的需要调整这些知识将给我们带来以下好处:
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
用户组。