php - Display tax amount based on specific tax class in WooCommerce variations

977

I'm currently using a custom function to target a specific product and change the output of the price with and without tax on the product page.

This currently works as intended for an individual product id, however trying to get this work for a specific tax_class instead with no avail

add_filter( 'woocommerce_available_variation', 'tax_variation', 10, 3);
function tax_variation( $data, $product, $variation ) {
$product = wc_get_product();
$id = $product->get_id();
$price_excl_tax = wc_get_price_excluding_tax( $variation ); // price without VAT
$price_incl_tax = wc_get_price_including_tax( $variation );  // price with VAT
$tax_amount     = $price_incl_tax - $price_excl_tax; // VAT amount


if ( $id == 113576 ) {

    $data['price_html'] = "<span class='ex-vat-price'>Price: <b>" . woocommerce_price($variation->get_price_excluding_tax()) . "</b></span><br>";
    $data['price_html'] .= "<span class='tax_amount'>Sales Tax 13%: <b>" . woocommerce_price($tax_amount) . "</b></span><br>"; 
    $data['price_html'] .= "<span class='inc-vat-price'>Total: <b>" . woocommerce_price($variation->get_price_including_tax()) . "</b></span>";
    return $data; 
    } else {
    $data['price_html'] .= "<span class='regular-price'> " . woocommerce_price($variation->get_price()) . "</span>";
    return $data;
}
} 

i want to change the if parameter to

$taxclass = $product->get_tax_class();

if ( $taxclass == 'costa-rate' ) {

but currently this does not function correctly and displays the regular price data twice

204

Answer

Solution:

Since WooCommerce 3, your code is outdated and with some errors.

I guess that you are usingwoocommerce_available_variation action hook.

Try the following instead:

add_filter( 'woocommerce_available_variation', 'custom_variation_price', 10, 3 );
function custom_variation_price( $data, $product, $variation ) {
  $price_excl_tax = (float) wc_get_price_excluding_tax( $variation ); // price without VAT
  $price_incl_tax = (float) wc_get_price_including_tax( $variation ); // price with VAT
  $tax_amount   = $price_incl_tax - $price_excl_tax;

  if( $variation->get_tax_class() === 'costa-rate' ) {
    $data['price_html'] = '<span >' . __("Price:") . ' <strong>' . wc_price($price_excl_tax) . '</strong></span><br>
    <span >' . __("Sales Tax 13%:") . ' <strong>' . wc_price($tax_amount) . '</strong></span><br>
    <span >' . __("Total:") . ' <strong>' . wc_price($price_incl_tax) . '</strong></span>';
  } else {
    $data['price_html'] .= '<span > ' . wc_price( wc_get_price_to_display( $variation ) ) . '</span>';
  }
  return $data;
}

Code goes in functions.php file of your active child theme (or active theme). It should better works.

People are also looking for solutions to the problem: php - Adding filter to eloquent resource to attach relationship conditionally

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.