停用特定用户组的插件

时间:2014-08-25 作者:Simon

我想停用特定用户的插件。我在一个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次。

在第一个循环中,用户不知道,因此不满足条件。插件仍处于激活状态。

我添加了一个更复杂的代码,其中包含三个条件:如果未设置用户,则取消设置插件,因此每次在第一个循环中都会停用插件。如果用户已设置(下一个循环),请检查他是否相应地设置/取消设置插件。也不起作用。

我没有找到正确的公式,所以也许我在某个地方错了,这是不可能做到的。每次都会为所有用户激活或停用插件。看起来第一次迭代很重要。

有没有办法停用特定用户/组的插件?

2 个回复
最合适的回答,由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 用户组。

SO网友:Mark Kaplun

您基本上只能根据wordpress“启动”时的信息(基本上是URL和cookie)停用整个插件。任何比这更复杂的检查都可能要等到引导完成后才能执行,此时插件已经加载,要“停用”它已经太迟了。

结束