当前位置: 首页 > 知识库问答 >
问题:

如何替换woocommerce_product_tax_class不推荐使用的挂钩?

左丘嘉言
2023-03-14

我的错误日志中出现了以下错误:woocommerce_product_tax_class从3.0.0版开始就不推荐使用了!改用woocommerce_product_get_tax_class。

我有以下功能来显示不同的用户角色不同的税务类。我可以直接将“woocommerce_product_tax_class”更改为“woocommerce_product_get_tax_class”吗?

function wc_diff_rate_for_user( $tax_class, $product ) {
        // Getting the current user 
        $current_user = wp_get_current_user();
        $current_user_data = get_userdata($current_user->ID);
    
        if ( in_array( 'eu_no_duty', $current_user_data->roles ) )
            $tax_class = 'Zero Rate';
      
      elseif ( in_array( 'eu_no_vat', $current_user_data->roles ) )
            $tax_class = 'Zero Rate';
      
      elseif ( in_array( 'eu_trusted', $current_user_data->roles ) )
            $tax_class = 'Zero Rate';
    
        return $tax_class;
    }
    add_filter( 'woocommerce_product_tax_class', 'wc_diff_rate_for_user', 1, 2 );

共有1个答案

吴单鹗
2023-03-14

因此,自WooCommerce 3以来,钩子Woocommerce_PRODUCT_TAX_CLASS已被弃用,取而代之的是Woocommerce_PRODUCT_GET_TAX_CLASSWoocommerce_PRODUCT_VARIATION_GET_TAX_CLASS钩子。

请改用以下简化代码:

add_filter( 'woocommerce_product_get_tax_class', 'tax_rate_based_on_user_role', 10, 2 );
add_filter( 'woocommerce_product_variation_get_tax_class', 'tax_rate_based_on_user_role', 10, 2 );
function tax_rate_based_on_user_role( $tax_class, $product ) {
    $roles   = array('eu_no_duty', 'eu_no_vat', 'eu_trusted'); // Here define user roles
    $user    = wp_get_current_user(); // Get current WP_User object 

    $matches = array_intersect( $user->roles, $roles ); // Check for matching user roles

    if ( ! empty($matches) ) {
        $tax_class = 'Zero Rate';
    }
    return $tax_class;
}

代码放在活动子主题(或活动主题)的functions.php文件中。它最好能起作用。

 类似资料:
  • 问题内容: 我已经继承了代码 @已弃用,并显示为“ 没有RequestConfig的类文档,我不知道应该使用哪种方法来替换and 。 问题答案: 您正在将apache HttpClient 4.3库与apache HttpClient 4.2代码一起使用。 请注意,在您的情况下,getParams()和ConnRoutePNames不是唯一不推荐使用的方法。DefaultHttpClient类本身

  • 问题内容: 我的Java代码中有一些不推荐使用的方法,如果有人可以在这里指导我,我将不胜感激。我有一个私有的Date变量: 在我的方法中,我声明了: 其他方法(例如和)也已弃用。 我知道我必须使用。如何在这里使用新代码?所有的setHours,getMinutes等都用上划线显示。 问题答案: 如果我正确理解了您的问题,这应该可以: 如果没有,您可以向我们显示要替换日期代码的完整方法吗? 编辑:这

  • 问题内容: 我发现这段代码的工作方式是,我可以以编程方式创建richfaces下拉菜单。但是不推荐使用某些代码。谁能告诉我要放什么而不是不赞成使用的电话? 谢谢 不推荐使用的代码行是: 问题答案: javadocs明确指出: 不推荐使用 。通过调用getExpressionFactory()然后 ExpressionFactory.createMethodExpression(javax.el.E

  • 问题内容: 这个问题已经在这里有了答案 : 用preg_replace_callback替换preg_replace()e修饰符 (3个答案) 4年前关闭。 上面的代码在升级到PHP 5.5后给出了弃用警告: 不推荐使用 :preg_replace():不推荐使用/ e修饰符,而应使用preg_replace_callback 如何用替换代码? 问题答案: 您可以使用匿名函数将匹配项传递给函数:

  • 问题内容: 我正在寻找解析URL以获得Java中querystring参数的集合。为了清楚起见,我需要解析给定的URL(或URL对象的字符串值),而不是Servlet请求中的URL。 似乎该方法将是显而易见的选择,但已弃用。 是否有我缺少的替代方法,或者只是不推荐使用而没有等效的替换/增强功能? 问题答案: 嗯,正如您提到的,URL不是来自servlet请求,正确的答案通常 取决于它 。 网址的查

  • 问题内容: Java 9 已弃用了六个包含Java EE API的模块,它们将很快被删除: 哪些维护的第三方工件提供了这些API?它们提供这些API的性能如何或它们必须提供哪些其他功能都没关系-重要的是,它们是这些模块/软件包的直接替代品吗? 为了更轻松地收集知识,我用到目前为止的知识进行了回答,并将答案设置为社区Wiki。我希望人们能扩展它而不是自己写答案。 在你投票关闭之前: 是的,各个模块上