PHP 如何根据用户角色启用或禁用插件或插件功能(WooCommerce 存款)?

PHP How to able or disable a plugin or plugin functionality (WooCommerce deposits) based on user role?

我正在使用来自 Barn2 media 的 woo 私人商店插件构建私人经销商 WooCommerce 商店。

这家商店是具有 public 区域的网站的一部分,客户可以在该区域填写申请表来申请经销商帐户。该商店将由两种不同类型的分销商使用,我相应地为其创建了两个用户角色:

1) 零售商

2) 批发商。

这两个角色最初是使用 Advanced Access Manager 创建的。自从我卸载了这个插件并安装了Profile Builder Pro,因为我需要一个可以完美集成用户角色和表单的插件。申请表实际上是用这个插件创建的。

这样做的原因是,一旦提交,申请就会由管理员手动 approved/activated 审查申请和帐户,根据申请人的个人资料和业务要求,使用其中一个个人资料或另一个个人资料.这正是 Profile Builder 允许您执行的操作。

登录后,单个产品页面上的产品会根据用户个人资料显示不同的定价。对于此功能,我正在使用 WooCommerce 插件的助推器的基于用户角色的价格功能。然后我安装了 WooCommerce 存款插件,以根据结账页面上的用户角色安排不同的付款程序。

但是,该插件不允许根据用户角色进行不同的支付设置。零售商用户的付款程序应该是直接的 forward/regular,也就是说必须在订购时全额付款。对于零售商用户,供应依赖于现有库存。

但是对于批发商用户,货物是在订单确认后生产的。要确认订单,应先支付一定百分比(比如 40%)的定金。货物生产完毕并准备好发货后,必须结清总金额的余额 %(比如 60%),以便发货。

我现在面临的挑战是:该插件非常适合为批发商用户设置付款程序,我想保持原样。但是,当登录用户是零售商时,如何完全禁用它或它的功能?

函数deactivate_plugin()会帮你完成,例如:

deactivate_plugins( '/plugins/xxx.php' );

其中 xxx 是插件的名称。

并且,检查用户的能力:

if (in_array('Administrator', $current_user->roles)) {

此处为管理员角色示例。

完整片段:

add_action('admin_init', 'desactivate_plugin_role');    
function desactivate_plugin_role()
{
    global $current_user;
    if (in_array('Administrator', $current_user->roles)) {
        deactivate_plugins( '/plugin-folder/plugin-file.php' );
    } else { 
        activate_plugins( '/plugin-folder/plugin-file.php' );
    }
}

经过测试,适合我,不要忘记更改插件的用户角色、路径和文件。