wordpress 在WooCommerce中显示含和不含增值税的单品价格

vd8tlhqk  于 2023-03-01  发布在  WordPress
关注(0)|答案(1)|浏览(141)

我试图在WooCommerce商店的每个单品页面上显示含和不含增值税的价格。
我已经用下面的脚本为变量产品做了这件事,这要归功于WooCommerce_available_variation钩子:

add_filter( 'woocommerce_available_variation', 'my_variation', 10, 3);
function my_variation( $data, $product, $variation ) {
    $data['price_html'] = "<bdi><span class='inc-vat-price'></span>" . woocommerce_price($variation->get_price_including_tax()) . "</bdi><br>";
    $data['price_html'] .= "<bdi><span class='ex-vat-price'>Tax Free - </span>". woocommerce_price($variation->get_price_excluding_tax()) . "</bdi>" ;
    return $data;
}

相反,对于单一产品,我还没有找到任何解决方案。
通过修改WooCommerce中单一产品的Price.php文件,不含增值税的价格也在变量产品中重复。在这种情况下,我使用了代码:

$product->get_price_excluding_tax()

这个问题的可能解决方案是什么?

ni65a41a

ni65a41a1#

您的WooCommerce_available_variation实际代码已经过时一段时间了:

  • 函数woocommerce_price()替换为wc_price()函数
  • 方法get_price_including_tax()替换为wc_get_price_including_tax()函数
  • 方法get_price_excluding_tax()替换为wc_get_price_excluding_tax()函数

现在你可以用一个独特的函数来处理简单产品、可变产品和产品变体html格式的价格,它也可以处理销售价格,显示含税和不含税的价格。
因此,以下代码将替换您的代码,并适用于简单产品、可变产品和产品变体,以自定义格式方式显示包含和不包含价格 (与您在代码中所做的一样)仅在单个产品页面上显示

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;
}

代码在functions.php文件中的活动子主题(或活动主题).测试和作品.
此代码不处理可变产品价格范围。

相关问题