Show single product prices with and without VAT in WooCommerce Show single product prices with and without VAT in WooCommerce wordpress wordpress

Show single product prices with and without VAT in WooCommerce


Your actual code for WooCommerce_available_variation is really outdated since a while:

  • The function woocommerce_price() is replaced by wc_price() function
  • The method get_price_including_tax() is replaced by wc_get_price_including_tax() function
  • The method get_price_excluding_tax() is replaced by wc_get_price_excluding_tax() function

Now you could have instead a unique function for simple products, variable products and product variations html formatted prices, that will handle also on sale price, displaying prices with and without taxes.

So the following will replace your code and will work for simple products, variable products and product variations displaying including and excluding prices in a custom formatting way (as you did on your code), on single product pages only:

add_filter('woocommerce_get_price_html', 'display_prices_incl_and_excl_taxes', 100, 2 );function display_prices_incl_and_excl_taxes( $price_html, $product ) {    global $woocommerce_loop;    // On single product pages only (and not on any product loop)    if( isset($woocommerce_loop['total']) && $woocommerce_loop['total'] == 0    && isset($woocommerce_loop['total']) && empty($woocommerce_loop['name']) ) {        // For simple products and products variations        if( $product->is_type('simple') || $product->is_type('variation') ) {            // On sale products            if( $product->is_on_sale() ) {                $regular_price_incl_tax = wc_get_price_including_tax( $product, array( 'price' => $product->get_regular_price() ) );                $price_incl_tax_html    = wc_format_sale_price( $regular_price_incl_tax, wc_get_price_including_tax( $product ) );                $regular_price_excl_tax = wc_get_price_excluding_tax( $product, array( 'price' => $product->get_regular_price() ) );                $price_excl_tax_html    = wc_format_sale_price( $regular_price_excl_tax, wc_get_price_excluding_tax( $product ) );            }            // Not on sale            else {                $price_incl_tax_html = wc_price( wc_get_price_including_tax( $product ) );                $price_excl_tax_html = wc_price( wc_get_price_excluding_tax( $product ) );            }        }        // variable pproducts        elseif( $product->is_type('variable') ) {            $prices = $product->get_variation_prices( true );            if ( ! empty( $prices['price'] ) ) {                $act_keys = array_keys($prices['price']);                $reg_keys = array_keys($prices['regular_price']);                $min_price_incl_tax = wc_get_price_including_tax( wc_get_product(reset($act_keys)));                $max_price_incl_tax = wc_get_price_including_tax( wc_get_product(end($act_keys)));                $min_price_excl_tax = wc_get_price_excluding_tax( wc_get_product(reset($act_keys)));                $max_price_excl_tax = wc_get_price_excluding_tax( wc_get_product(end($act_keys)));                $min_reg_price_jncl_tax = wc_get_price_including_tax( wc_get_product(reset($reg_keys)));                $max_reg_price_incl_tax = wc_get_price_including_tax( wc_get_product(end($reg_keys)));                $min_reg_price_excl_tax = wc_get_price_excluding_tax( wc_get_product(reset($reg_keys)));                $max_reg_price_excl_tax = wc_get_price_excluding_tax( wc_get_product(end($reg_keys)));                if ( $min_price_excl_tax !== $max_price_excl_tax ) {                    $price_incl_tax_html = wc_format_price_range( $min_price_incl_tax, $max_reg_price_incl_tax );                    $price_excl_tax_html = wc_format_price_range( $min_price_excl_tax, $max_reg_price_excl_tax );                }                elseif ( $product->is_on_sale() && $min_reg_price_excl_tax === $max_reg_price_excl_tax ) {                    $price_incl_tax_html = wc_format_sale_price( wc_price( $max_reg_price_incl_tax ), wc_price( $min_price_incl_tax ) );                    $price_excl_tax_html = wc_format_sale_price( wc_price( $max_reg_price_excl_tax ), wc_price( $min_price_excl_tax ) );                }                else {                    $price_incl_tax_html = wc_price( $min_price_incl_tax );                    $price_excl_tax_html = wc_price( $min_price_excl_tax );                }            }        }        if ( isset($price_incl_tax_html) && isset($price_excl_tax_html) ) {            $price_html  = '<bdi><span class="inc-vat-price"></span>' . $price_incl_tax_html . '<bdi><br>';            $price_html .= '<bdi><span class="ex-vat-price">'. __("Tax Free") . ' - </span>' . $price_excl_tax_html . '<bdi><br>';            $price_html .= $product->get_price_suffix();        }    }    return $price_html;}

Code goes in functions.php file of the active child theme (or active theme). Tested and works.


This code will not handle variable product price range.