You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce价格定制需求:展示含税/不含税及促销价

解决方案

以下代码可同时满足简单/可变产品的价格显示需求,保留促销价的划线原价样式,且在产品循环页和单个产品页均生效:

核心代码

add_filter( 'woocommerce_get_price_html', 'custom_display_price_with_tax_info', 100, 2 );
function custom_display_price_with_tax_info( $price_html, $product ) {
    // 跳过不可购买的产品
    if ( ! $product->is_purchasable() ) {
        return $price_html;
    }

    $tax_incl_text = ' incl. tax';
    $tax_excl_text = ' excl. tax';
    $price_html = '';

    // 处理简单产品
    if ( $product->is_type( 'simple' ) ) {
        $regular_price = $product->get_regular_price();
        $sale_price = $product->get_sale_price();

        // 计算含税/不含税原价
        $reg_incl = wc_price( wc_get_price_including_tax( $product, array( 'price' => $regular_price ) ) );
        $reg_excl = wc_price( wc_get_price_excluding_tax( $product, array( 'price' => $regular_price ) ) );

        if ( $sale_price ) {
            // 计算含税/不含税促销价
            $sale_incl = wc_price( wc_get_price_including_tax( $product, array( 'price' => $sale_price ) ) );
            $sale_excl = wc_price( wc_get_price_excluding_tax( $product, array( 'price' => $sale_price ) ) );

            // 保留划线原价,添加促销价及税项说明
            $price_html .= '<del class="regular-price">' . $reg_incl . $tax_incl_text . ' | ' . $reg_excl . $tax_excl_text . '</del>';
            $price_html .= '<ins class="sale-price">' . $sale_incl . $tax_incl_text . ' | ' . $sale_excl . $tax_excl_text . '</ins>';
        } else {
            // 无促销价时显示正常价格及税项说明
            $price_html .= '<span class="regular-price">' . $reg_incl . $tax_incl_text . ' | ' . $reg_excl . $tax_excl_text . '</span>';
        }
    }

    // 处理可变产品
    elseif ( $product->is_type( 'variable' ) ) {
        $min_reg = $product->get_variation_regular_price( 'min' );
        $max_reg = $product->get_variation_regular_price( 'max' );
        $min_sale = $product->get_variation_sale_price( 'min' );
        $max_sale = $product->get_variation_sale_price( 'max' );

        // 计算含税/不含税的最低/最高原价
        $min_reg_incl = wc_price( wc_get_price_including_tax( $product, array( 'price' => $min_reg ) ) );
        $max_reg_incl = wc_price( wc_get_price_including_tax( $product, array( 'price' => $max_reg ) ) );
        $min_reg_excl = wc_price( wc_get_price_excluding_tax( $product, array( 'price' => $min_reg ) ) );
        $max_reg_excl = wc_price( wc_get_price_excluding_tax( $product, array( 'price' => $max_reg ) ) );

        if ( $min_sale ) {
            // 计算含税/不含税的最低/最高促销价
            $min_sale_incl = wc_price( wc_get_price_including_tax( $product, array( 'price' => $min_sale ) ) );
            $max_sale_incl = wc_price( wc_get_price_including_tax( $product, array( 'price' => $max_sale ) ) );
            $min_sale_excl = wc_price( wc_get_price_excluding_tax( $product, array( 'price' => $min_sale ) ) );
            $max_sale_excl = wc_price( wc_get_price_excluding_tax( $product, array( 'price' => $max_sale ) ) );

            // 处理价格区间/单一价格的显示逻辑
            $reg_html = ( $min_reg === $max_reg ) 
                ? $min_reg_incl . $tax_incl_text . ' | ' . $min_reg_excl . $tax_excl_text 
                : sprintf( '%1$s - %2$s', $min_reg_incl . $tax_incl_text, $max_reg_incl . $tax_incl_text ) . ' | ' . sprintf( '%1$s - %2$s', $min_reg_excl . $tax_excl_text, $max_reg_excl . $tax_excl_text );

            $sale_html = ( $min_sale === $max_sale ) 
                ? $min_sale_incl . $tax_incl_text . ' | ' . $min_sale_excl . $tax_excl_text 
                : sprintf( '%1$s - %2$s', $min_sale_incl . $tax_incl_text, $max_sale_incl . $tax_incl_text ) . ' | ' . sprintf( '%1$s - %2$s', $min_sale_excl . $tax_excl_text, $max_sale_excl . $tax_excl_text );

            $price_html .= '<del class="regular-price">' . $reg_html . '</del>';
            $price_html .= '<ins class="sale-price">' . $sale_html . '</ins>';
        } else {
            // 无促销价时显示原价区间/单一价格及税项说明
            $reg_html = ( $min_reg === $max_reg ) 
                ? $min_reg_incl . $tax_incl_text . ' | ' . $min_reg_excl . $tax_excl_text 
                : sprintf( '%1$s - %2$s', $min_reg_incl . $tax_incl_text, $max_reg_incl . $tax_incl_text ) . ' | ' . sprintf( '%1$s - %2$s', $min_reg_excl . $tax_excl_text, $max_reg_excl . $tax_excl_text );

            $price_html .= '<span class="regular-price">' . $reg_html . '</span>';
        }
    }

    // 其他产品类型(如分组、订阅)可按需扩展
    else {
        return $price_html;
    }

    return $price_html;
}

代码说明

  • 钩子选择:使用woocommerce_get_price_html钩子覆盖默认价格输出逻辑,该钩子在产品循环和单个产品页均会触发。
  • 产品类型兼容:分别处理简单产品和可变产品,可变产品支持价格区间和单一价格两种场景。
  • 促销价保留:通过<del>标签保留原价的划线样式,<ins>标签显示促销价,符合WooCommerce默认样式规范。
  • 税项计算:使用WooCommerce内置函数计算价格,确保与站点税设置一致。
  • 自定义文本:直接修改$tax_incl_text和$tax_excl_text变量即可调整税项说明文本。

使用方法

将上述代码添加到当前激活主题的functions.php文件中,或通过自定义代码插件(如Code Snippets)添加,无需额外配置即可生效。

内容的提问来源于stack exchange,提问作者Captain Krik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:28:12