【问题标题】:Exclude specific product variation from tax class filter hook in WooCommerce从 WooCommerce 中的税级过滤器挂钩中排除特定产品变体
【发布时间】:2020-10-12 15:07:28
【问题描述】:

我正在尝试在 wordpress 过滤器中按角色应用特定的税类。此税种适用于变体产品以及常规单一产品。我只需要通过 id 排除特定变体产品或生产变体。 这是我目前所拥有的:

 function wc_diff_rate_for_user( $tax_class, $product ) {
  $user_id = get_current_user_id();
  $user = get_user_by( 'id', $user_id );
  if ( is_user_logged_in() && ! empty( $user ) && in_array( 'MEMBER', $user->roles ) &&  is_product() && get_the_id() != 1337)   {
    $tax_class = 'Reduced rate';
  }
  return $tax_class;
 }
 add_filter( 'woocommerce_product_get_tax_class', 'wc_diff_rate_for_user', 1, 2 );
 add_filter( 'woocommerce_product_variation_get_tax_class', 'wc_diff_rate_for_user', 1, 2 );

我认为我在以下部分失败了: is_product() && get_the_id() != 1337) 因为“降低税率”的税级适用于所有产品,包括我试图排除的产品。 任何建议将不胜感激。

【问题讨论】:

    标签: php wordpress woocommerce tax product-variations


    【解决方案1】:

    您的代码中的主要问题是 get_the_id() 在单个 可变产品 页面上不适用于产品变体,因为它提供了可变产品 ID 但没有任何产品变体 ID...

    正如您在代码中看到的,挂钩函数有 2 个可用参数,因此您可以使用变量 $product 使用方法 get_id() 从中获取 Id,如下所示:

    add_filter( 'woocommerce_product_get_tax_class', 'change_tax_class_user_role', 10, 2 );
    add_filter( 'woocommerce_product_variation_get_tax_class', 'change_tax_class_user_role', 10, 2 );
    function change_tax_class_user_role( $tax_class, $product ) {
        $excluded_variation_id = 1337;
        $targeted_user_role    = 'MEMBER';
    
        if ( $product->is_type('variation') && $product->get_id() == $excluded_variation_id ) {
            return $tax_class;
        } 
        elseif ( current_user_can( $targeted_user_role ) ) {
            return 'Reduced rate';
        }
        return $tax_class;
    }
    

    代码在您的活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。

    【讨论】:

    • 谢谢@LoicTheAztec,但恐怕它不能按预期工作。仅当我将 ` && is_product() && $product->get_id() != $excluded_variation_id` 部分排除在外时,才会应用降低的费率。所有选择的产品都应该有折扣率,只有 id 1337 的产品应该有标准费率。会员角色的税为 7%,除了我尝试使用变体 id 1337 的产品之外的所有内容,该产品具有 16% 的税。我必须用另一个过滤器来解决这个问题吗?由于用户角色和产品税的规则相互冲突,这是否可能?
    • 非常感谢,就这样,我在这个过程中学到了很多东西。祝你有美好的一天,再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2018-11-09
    • 2013-08-11
    • 2021-01-26
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多