Skip to content

Instantly share code, notes, and snippets.

@woogist
Last active October 4, 2022 10:40
Show Gist options
  • Save woogist/48c776c39df23d53df8d to your computer and use it in GitHub Desktop.
Save woogist/48c776c39df23d53df8d to your computer and use it in GitHub Desktop.
Apply different tax rates based on user role
<?php
/**
* Apply a different tax rate based on the user role.
*/
function wc_diff_rate_for_user( $tax_class, $product ) {
if ( is_user_logged_in() && current_user_can( 'administrator' ) ) {
$tax_class = 'Zero 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 );
@trztrztrz
Copy link

Hi, that code works fine for me.

I would like to display the prices excluding taxes on shop and single product page for specific user role BUT keep the taxes in cart and checkout.

Many thanks if someone helps me with that :)

@KevinChauvet
Copy link

Hi, that code works fine for me.

I would like to display the prices excluding taxes on shop and single product page for specific user role BUT keep the taxes in cart and checkout.

Many thanks if someone helps me with that :)

Same for me !

@Danielrbc
Copy link

Hi, that code works fine for me.
I would like to display the prices excluding taxes on shop and single product page for specific user role BUT keep the taxes in cart and checkout.
Many thanks if someone helps me with that :)

Same for me !

You can do that you need on woocommerce configuration of taxes.
Woocommerce>>settings>taxes.

Good Luck!

@KevinChauvet
Copy link

Hi, that code works fine for me.
I would like to display the prices excluding taxes on shop and single product page for specific user role BUT keep the taxes in cart and checkout.
Many thanks if someone helps me with that :)

Same for me !

You can do that you need on woocommerce configuration of taxes.
Woocommerce>>settings>taxes.

Good Luck!

Not really. In france, in B2B you have to show the prices tax excluded everywhere except on the total in the cart. So I need to force the detailed taxes in the total cart and excluded tax everywhere else ...

@Danielrbc
Copy link

OK, then use this code. Maybe can help you.

add_filter( 'woocommerce_get_price_html', 'custom_price_message' ); function custom_price_message($price) { $new_price = $price . ' <span class="custom-price-prefix">' . __('<br>(plus VAT)').'</span>'; return $new_price; }

@KevinChauvet
Copy link

OK, then use this code. Maybe can help you.

add_filter( 'woocommerce_get_price_html', 'custom_price_message' ); function custom_price_message($price) { $new_price = $price . ' <span class="custom-price-prefix">' . __('<br>(plus VAT)').'</span>'; return $new_price; }

Yeah I already did that, the problem is that it's just a change for the suffix, not the final price ! The price is still without taxes and I need to force the VAT to be applied on the final price :)

@lufemas
Copy link

lufemas commented Jun 23, 2021

It does not work when a product is added or edit in the Order Admin Page, it is probably another hook that's called, if anyone know please tell me

@tahmidbintaslim
Copy link

Hi ! Is there anyone who used this function for Woocommerce Membership Plugin which has Membership Plans?

@GogoulosT
Copy link

For reference, this is what I now use:

/**
 * Apply a zero tax rate for 'administrator' user role.
 */
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( 'administrator', $user->roles ) ) {
    $tax_class = 'Zero Rate';
  }

  return $tax_class;
}
add_filter( 'woocommerce_product_get_tax_class', 'wc_diff_rate_for_user', 1, 2 );

Hello, can you please help, i need to apply zero tax to everyone except wholesaler role. How is that possible?

Hello

I used this code and worked great for simple products. For variable products i still see prices with VAT.
Please advise

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment