Php 从WooCommerce中的税级过滤器挂钩中排除特定的产品变化

Php 从WooCommerce中的税级过滤器挂钩中排除特定的产品变化,php,wordpress,woocommerce,tax,product-variations,Php,Wordpress,Woocommerce,Tax,Product Variations,我试图在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() &

我试图在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()&获取_id()!=1337)
因为“降低税率”的税种适用于所有产品,包括我试图排除的产品。
如果您有任何建议,我们将不胜感激。

您代码中的主要问题是
获取
在单个可变产品页面上不能用于产品变体,因为它提供了可变产品id,但没有任何产品变体id

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

add_filter('woocommerce_product_get_tax_class','change_tax_class_user_role',10,2);
添加过滤器('woocommerce\u product\u variation\u get\u tax\u class','change\u tax\u class\u user\u role',10,2);
功能更改\u税类\u用户\u角色($tax\u类,$product){
$excluded_variation_id=1337;
$targeted_user_role='MEMBER';
如果($product->is_type('variation')&&&$product->get_id()==$excluded_variation_id){
报税$tax_类;
} 
elseif(当前用户可以($targeted用户角色)){
回报率“降低率”;
}
报税$tax_类;
}

代码进入活动子主题(或活动主题)的functions.php文件。它应该能工作。

谢谢@LoicTheAztec,但恐怕它不能按预期工作。只有在我离开`&&is_product()&&&$product->get_id()!=$已排除的_变体_id `零件输出。所有选定的产品应具有降低的费率,只有id为1337的产品应具有标准费率。成员角色的税费为7%,除了我试图以变体id 1337为目标的产品,该变体id 1337具有16%的税费。我必须用另一个过滤器来修复吗?这可能是因为用户角色和产品税的规定相互冲突吗?非常感谢,确实如此,我在这个过程中学到了很多。祝你有一个愉快的一天,再来一次thx。