如何使特定插件仅针对一个特定用户角色(或可能是一组用户角色)处于活动状态?
有什么我可以添加到我的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
它对管理员用户(正确)和来宾(错误)保持活动状态。
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 对于一些用户来说,但它是一个干净的解决方案,只为一些用户运行功能(执行)。