在 WooCommerce 结帐问题中显示产品销售价格

Display product sale price in WooCommerce checkout issues

我正在使用此代码片段在 WooCommerce 结账时显示产品销售价格:

function show_sale_price_at_checkout( $subtotal, $cart_item, $cart_item_key ) {
    
    $product = $cart_item['data'];
    $quantity = $cart_item['quantity'];
    if ( ! $product ) {
        return $subtotal;
    }
    $regular_price = $sale_price = $suffix = '';
    if ( $product->is_taxable() ) {
        if ( 'excl' === WC()->cart->tax_display_cart ) {
            $regular_price = wc_get_price_excluding_tax( $product, array( 'price' => $product->get_regular_price(), 'qty' => $quantity ) );
            $sale_price    = wc_get_price_excluding_tax( $product, array( 'price' => $product->get_sale_price(), 'qty' => $quantity ) );
            if ( WC()->cart->prices_include_tax && WC()->cart->tax_total > 0 ) {
                $suffix .= ' ' . WC()->countries->ex_tax_or_vat() . '';
            }
        } else {
            $regular_price = wc_get_price_including_tax( $product, array( 'price' => $product->get_regular_price(), 'qty' => $quantity ) );
            $sale_price = wc_get_price_including_tax( $product, array( 'price' => $product->get_sale_price(), 'qty' => $quantity ) );
            if ( ! WC()->cart->prices_include_tax && WC()->cart->tax_total > 0 ) {
                $suffix .= ' ' . WC()->countries->inc_tax_or_vat() . '';
            }
        }
    } else {
        $regular_price    = $product->get_price() * $quantity;
        $sale_price       = $product->get_sale_price() * $quantity;
    }
    if ( $product->is_on_sale() && ! empty( $sale_price ) ) {
        $price = wc_format_sale_price(
                     wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price(), 'qty' => $quantity ) ),
                     wc_get_price_to_display( $product, array( 'qty' => $quantity ) )
                 ) . $product->get_price_suffix();
    } else {
        $price = wc_price( $regular_price ) . $product->get_price_suffix();
    }
   
    $price = $price . $suffix;
    return $price;
}
add_filter( 'woocommerce_cart_item_subtotal', 'show_sale_price_at_checkout', 10, 3 );

截图:https://ibb.co/xLB60Px

但是,存在 3 个问题:

1. 我无法通过自定义 CSS 单独定位促销价。有没有办法给售价一个CSSclass?

2. 我无法正确更改促销价的颜色。将颜色设置为 #000000 不会导致纯黑色,它保持灰色。所以我认为销售价格有点透明,但添加 opacity: 1; 没有帮助,它保持灰色。我不能增加不透明度,只能降低它。我很困惑。

3. 当加载结帐页面时,它会在没有促销价的产品旁边显示这条丑陋的长消息:https://ibb.co/PzJztck 这是什么意思,如何理解摆脱它?

有人可以帮助解决这些问题吗?

在您的函数中,您检查产品是否应纳税以及价格是否必须不含增值税或含增值税。 此检查已在 WooCommerce 功能中完成 wc_get_price_to_displayhere 文档。

所以你可以这样优化它:

// shows the product price on sale (if any) in the checkout table
add_filter( 'woocommerce_cart_item_subtotal', 'show_sale_price_at_checkout', 10, 3 );
function show_sale_price_at_checkout( $subtotal, $cart_item, $cart_item_key ) {
    
    // gets the product object
    $product = $cart_item['data'];
    // get the quantity of the product in the cart
    $quantity = $cart_item['quantity'];

    // check if the object exists
    if ( ! $product ) {
        return $subtotal;
    }

    // check if the product is on sale
    if ( $product->is_on_sale() && ! empty( $product->get_sale_price() ) ) {
        // shows sale price and regular price       
        $price = wc_format_sale_price (
            // regular price
            wc_get_price_to_display(
                $product, array(
                    'price' => $product->get_regular_price(),
                    'qty' => $quantity
                    )
                ),
            // sale price
            wc_get_price_to_display( $product, array (
                'price' => $product->get_sale_price(),
                'qty' => $quantity
                )
            )
        ) . $product->get_price_suffix();
    } else {
        // shows regular price
        $price = wc_price (
            // regular price
            wc_get_price_to_display(
                $product, array (
                    'price' => $product->get_regular_price(),
                    'qty' => $quantity
                )
            )
        ) . $product->get_price_suffix();
    }
   
    return $price;
}

代码已经过测试并且可以工作。将它添加到您的活动主题 functions.php.

关于这3个问题,我分几部分回答你:

  1. 您可以使用 ins 元素作为促销价格的选择器。例如:tr.cart_item ins { ... }

  2. 前一点应该解决了这一点。如果它不起作用,它可能取决于另一个先前声明的选择器的特殊性。在这种情况下,您有两个选择:

    • 找到已经声明的CSS规则修改
    • !important添加到新CSS规则的末尾(最好避免它)
  3. 我发布的函数应该可以修复这个错误。