仅为特定用户角色执行插件

时间:2020-01-17 作者:Lyall

如何使特定插件仅针对一个特定用户角色(或可能是一组用户角色)处于活动状态?

有什么我可以添加到我的functions.php 在子主题中,是否仅为特定用户角色使用特定插件?

我尝试了这里的各种答案和文章,但似乎没有什么能提供我所需要的。

Update:

我尝试了下面的代码(作为测试),如果管理员访问该站点,它将禁用插件,但一旦禁用,它将对所有人保持禁用状态。它需要评估当前用户并根据其角色激活或重新激活。

add_filter( \'option_active_plugins\', \'custom_plugin_load_filter\' );
function custom_plugin_load_filter( $plugins ) {
    $user = wp_get_current_user();
    if ( in_array( \'administrator\', (array) $user->roles ) ) {
        //unset( $plugins[\'additional-order-confirmation-email/additional-order-confirmation-email.php\'] ); // change my-plugin-slug
         $key = array_search( \'additional-order-confirmation-email/additional-order-confirmation-email.php\' , $plugins );
            if ( false !== $key ) {
                unset( $plugins[$key] );
            }

    }
    return $plugins;
}   
如果我将其更改为!in_array 它对管理员用户(正确)和来宾(错误)保持活动状态。

2 个回复
SO网友:majick

如果可以的话,修改插件不是一个好主意,因为插件可能已经升级,您将丢失更改并需要重做。

幸运的是,在这种情况下,这并不是必须的,因为你可以选择过滤活动插件选项。为此,您需要插件slug:

add_filter( \'option_active_plugins\', \'custom_plugin_load_filter\' );
function custom_plugin_load_filter( $plugins ) {
    $user = wp_get_current_user();
    if ( !in_array( \'sales_events\', (array) $user->roles ) ) {
        unset( $plugins[\'my-plugin-slug\'] ); // change my-plugin-slug
    }
    return $plugins;
}
注意,由于这也将在插件页面上运行,因此可能会阻止任何没有该角色的人禁用插件(因为对他们来说,插件似乎处于非活动状态)

SO网友:Hector

这是一个基于问题标题中“执行插件”一词的答案。

如果您只想为用户角色运行/执行插件,则无需阻止其加载。我的解决方案是让WordPress加载插件并在插件中管理它。

所以,你可以有这样的代码:

// In the main plugin file that loads and initiate plugin functionalities.

if ( ! current_user_can( \'manage_options\' ) ) {
    return;
}

include \'plugin-file.php\';
new myPlugin();
通过使用此解决方案,您的插件对所有用户都是活动的,但实际上works only 对于具有manage_options 能力。

它不会生成插件Inactive 对于一些用户来说,但它是一个干净的解决方案,只为一些用户运行功能(执行)。

相关推荐