我使用以下方法对前端的非专业用户隐藏增值税。我的问题是,当下订单时,增值税保持为零,导致计算不正确。产品的创建价格不含增值税。对于非专业用户,产品价格应为不含增值税加增值税的价格,得出最终含增值税价格。
但是,我不能使用“excl”和“incl”,因为我在不同阶段有特殊的价格显示:购物车、结账和订单。有没有办法只在前端为特定用户隐藏增值税?
function zero_rate_for_custom_user_role( $tax_class, $product ) {
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
$is_pro_user = 'yes' == get_user_meta( $current_user->ID, 'professionnel', true );
if ( !$is_pro_user ) {
$tax_class = 'zero-rate';
}
}else{
$tax_class = 'zero-rate';
}
return $tax_class;
}
add_filter('woocommerce_product_get_tax_class','zero_rate_for_custom_user_role', 10, 2 );
add_filter( 'woocommerce_product_variation_get_tax_class', 'zero_rate_for_custom_user_role', 10, 2 );
WC_Customer
类具有is_vat_exempt
属性,这对于免除用户税很有用。
您可以尝试使用以下代码将非专业用户设置为“免增值税”:
add_action( 'template_redirect', 'set_non_professional_users_vat_exempt' );
function set_non_professional_users_vat_exempt(){
$professional = get_user_meta( get_current_user_id(), 'professionnel', true );
// Set defined user role(s) "Vat exempt" if it isn't set yet
if ( $professional !== 'yes' && ! WC()->customer->is_vat_exempt() ) {
WC()->customer->set_is_vat_exempt( true );
} elseif ( $professional === 'yes' && WC()->customer->is_vat_exempt() ) {
WC()->customer->set_is_vat_exempt( false );
}
}
代码位于主题的functions.php 文件中(或插件中)。它可以工作。
或者您也可以尝试以下操作,更改产品“tax_status”属性:
add_filter('woocommerce_product_get_tax_status','alter_product_tax_status_depending_on_user_metadata', 10, 2 );
add_filter( 'woocommerce_product_variation_get_tax_status', 'alter_product_tax_status_depending_on_user_metadata', 10, 2 );
function alter_product_tax_status_depending_on_user_metadata( $tax_status, $product ) {
if ( get_user_meta( get_current_user_id(), 'professionnel', true ) !== 'yes' ) {
return 'none';
}
return $tax_status;
}
代码位于主题的functions.php 文件中(或插件中)。它可以工作。