Disable plugin per user role

时间:2016-06-03 作者:antlego

我必须为某些用户角色禁用折扣插件,我已经编写了此插件并将其放入子主题functions.php

global $woocommerce;

get_currentuserinfo();
global $current_user;

if ($current_user->ID) {
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);

    if ($user_role == \'B2B\') {
         deactivate_plugins(\'/httpdocs/wp-content/plugins/woocommerce-payment-discounts/woocommerce-payment-discounts.php\', false);
    }
}
但这行不通,为什么?是否正确?停用仅针对用户会话?

2 个回复
最合适的回答,由SO网友:TomC 整理而成

您应该使用wc_payment_discounts_apply_discount filter.

尝试以下操作:

function remove_privato_discounts() { 
    global $woocommerce; 
    get_currentuserinfo(); 
    global $current_user; 
    if ($current_user->ID) { 
        $user_roles = $current_user->roles; 
        $user_role = array_shift($user_roles); 
        if ( $user_role !== \'b2b\') { 
            $discount = 0; 
            $woocommerce->cart->discount_total = $discount; 
            return true; // Do not apply discount to privato 
            } 
        } 
        return false; 
    } 
add_filter( \'wc_payment_discounts_apply_discount\', \'remove_privato_discounts\'); 

SO网友:Mark Kaplun

您不能基于任何条件“停用”插件,因为您的代码只有在插件已经初始化之后才能运行,并且您不能反向初始化。

您应该以禁用插件的特定功能为目标,但除非它有专门建议如何执行的文档,否则我不会做这样的事情,因为某些功能可能依赖于另一个功能,禁用部分功能可能会使整个系统处于不稳定状态,并产生不可预见的影响。在做这样的事情之前,至少应该确保您了解整个插件是如何工作的。此外,您应该准备好,插件的未来升级将不会以相同的方式工作,并将导致您的代码中断。