在Woocommerce中,我在Woocommerce常规设置中设置了小数点的个数为7,这样就可以显示产品价格,就像这样**$0.0453321。我想知道我是否可以将cart total设置/四舍五入为2位小数(类似于$2.34**)?
$0.0453321
$2.34
pdkcd3nj1#
正确的方法是只更改购物车和结帐页面允许的小数位数:
add_filter( 'wc_get_price_decimals', 'change_prices_decimals', 20, 1 ); function change_prices_decimals( $decimals ){ if( is_cart() || is_checkout() ) $decimals = 2; return $decimals; }
要将显示的购物车总金额设置为2位小数,请使用以下命令 (仅适用于Woocommerce 3.3+):
add_filter( 'woocommerce_cart_tax_totals', 'change_decimals_cart_tax_totals', 20, 2 ); function change_decimals_cart_tax_totals( $tax_totals, $cart ){ $decimals = array('decimals' => 2); $taxes = $cart->get_taxes(); $tax_totals = array(); foreach ( $taxes as $key => $tax ) { $code = WC_Tax::get_rate_code( $key ); if ( $code || $key === apply_filters( 'woocommerce_cart_remove_taxes_zero_rate_id', 'zero-rated' ) ) { if ( ! isset( $tax_totals[ $code ] ) ) { $tax_totals[ $code ] = new stdClass(); $tax_totals[ $code ]->amount = 0; } $tax_totals[ $code ]->tax_rate_id = $key; $tax_totals[ $code ]->is_compound = WC_Tax::is_compound( $key ); $tax_totals[ $code ]->label = WC_Tax::get_rate_label( $key ); $tax_totals[ $code ]->amount += wc_round_tax_total( $tax ); $tax_totals[ $code ]->formatted_amount = wc_price( wc_round_tax_total( $tax_totals[ $code ]->amount ), $decimals ); } } if ( apply_filters( 'woocommerce_cart_hide_zero_taxes', true ) ) { $amounts = array_filter( wp_list_pluck( $tax_totals, 'amount' ) ); $tax_totals = array_intersect_key( $tax_totals, $amounts ); } return $tax_totals; } add_filter( 'woocommerce_cart_totals_order_total_html', 'change_decimals_cart_totals_order_total_html', 20, 1 ); function change_decimals_cart_totals_order_total_html( $formatted_price ){ $decimals = array('decimals' => 2); $value = '<strong>' . wc_price( WC()->cart->get_total('edit'), $decimals ) . '</strong> '; // If prices are tax inclusive, show taxes here. if ( wc_tax_enabled() && WC()->cart->display_prices_including_tax() ) { $tax_string_array = array(); $cart_tax_totals = WC()->cart->get_tax_totals(); if ( get_option( 'woocommerce_tax_total_display' ) == 'itemized' ) { foreach ( $cart_tax_totals as $code => $tax ) { $tax_string_array[] = sprintf( '%s %s', $tax->formatted_amount, $tax->label ); } } elseif ( ! empty( $cart_tax_totals ) ) { $tax_string_array[] = sprintf( '%s %s', wc_price( WC()->cart->get_taxes_total( true, true ), $decimals ), WC()->countries->tax_or_vat() ); } if ( ! empty( $tax_string_array ) ) { $taxable_address = WC()->customer->get_taxable_address(); $estimated_text = WC()->customer->is_customer_outside_base() && ! WC()->customer->has_calculated_shipping() ? sprintf( ' ' . __( 'estimated for %s', 'woocommerce' ), WC()->countries->estimated_for_prefix( $taxable_address[0] ) . WC()->countries->countries[ $taxable_address[0] ] ) : ''; $value .= '<small class="includes_tax">' . sprintf( __( '(includes %s)', 'woocommerce' ), implode( ', ', $tax_string_array ) . $estimated_text ) . '</small>'; } } return $value; }
你不能真的四舍五入的价格在购物车总额分摊。如果你这样做与不同的挂钩,你会得到计算错误。我的代码只是改变小数点的数量显示格式化价格,不会改变实际价格的计算...相关:更改Woocommerce显示的购物车小计的小数位数
8yparm6h2#
如果你想改变购物车总只有在购物车和结帐页,那么你需要复制模板在您的主题首先从woocommerce插件模板复制2个文件到你的主题。1)复制plugins\woocommerce\templates\cart\cart-totals.php到your-theme-folder\woocommerce\cart\cart-totals.php2)复制plugins\woocommerce\templates\checkout\review-order.php到your-theme-folder\woocommerce\checkout\review-order.php在这两个文件中找到**wc_cart_totals_order_total_html()**注解此代码并将其放在下面的代码中。
$args=array('decimals'=> 2); echo wc_price(WC()->cart->total,$args);
这段代码是测试和它的工作罚款。希望它会帮助你以及。
jhiyze9q3#
在我的情况下,我需要保持3个小数位“可见”整个网站,但只有近似的总数到2个小数位(与零的第三个小数位),因为我的支付网关只接受小数点后的2个有效数字。
Prices displayed as: 0.336 Taxes: 0.017 But grand total needed to be: 0.350 (instead of 0.353)
我最终没有使用代码,因为它太可怕了,但你可以说这是一种精神锻炼:
add_filter( 'wc_get_price_decimals', 'change_prices_decimals', 20, 1 ); function change_prices_decimals( $decimals ){ if( is_cart() || is_checkout() ) { $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,0); $length = count($trace); for ($i = 0; $i < $length; $i++) { if($trace[$i]["function"] == "set_total"){ $decimals = 2; return $decimals; } } } return $decimals; }
mctunoxg4#
接受的答案使用wc_get_price_decimals过滤器在购物车页面、结帐页面和感谢页面上全局更改小数位数。对于我的用例,结帐页面条件是OK的(因为没有显示购物车商品价格),但对于购物车页面,我只需要购物车总计中的2位小数,购物车商品中的不是。要在购物车项目中保留3位小数(来自WC设置),并在购物车总计中显示2位小数,您可以在特定购物车页面操作中依次add和remove所需的筛选器:
wc_get_price_decimals
add
remove
// Change display to 2 decimals before cart totals function start_two_decimal_display() { add_filter( 'wc_get_price_decimals', function() { return 2; }, 20 ); } add_action( 'woocommerce_before_cart_totals', 'start_two_decimal_display', 20 ); // Change display back to 3 decimals after cart totals function end_two_decimal_display() { add_filter( 'wc_get_price_decimals', function() { return 3; }, 20 ); } add_action( 'woocommerce_after_cart_totals', 'end_two_decimal_display', 20 );
您也可以对不同的部分使用相同的方法,使用不同的操作。
4条答案
按热度按时间pdkcd3nj1#
正确的方法是只更改购物车和结帐页面允许的小数位数:
要将显示的购物车总金额设置为2位小数,请使用以下命令 (仅适用于Woocommerce 3.3+):
你不能真的四舍五入的价格在购物车总额分摊。如果你这样做与不同的挂钩,你会得到计算错误。我的代码只是改变小数点的数量显示格式化价格,不会改变实际价格的计算...
相关:更改Woocommerce显示的购物车小计的小数位数
8yparm6h2#
如果你想改变购物车总只有在购物车和结帐页,那么你需要复制模板在您的主题
首先从woocommerce插件模板复制2个文件到你的主题。
1)复制plugins\woocommerce\templates\cart\cart-totals.php到your-theme-folder\woocommerce\cart\cart-totals.php
2)复制plugins\woocommerce\templates\checkout\review-order.php到your-theme-folder\woocommerce\checkout\review-order.php
在这两个文件中找到**wc_cart_totals_order_total_html()**注解此代码并将其放在下面的代码中。
这段代码是测试和它的工作罚款。希望它会帮助你以及。
jhiyze9q3#
在我的情况下,我需要保持3个小数位“可见”整个网站,但只有近似的总数到2个小数位(与零的第三个小数位),因为我的支付网关只接受小数点后的2个有效数字。
我最终没有使用代码,因为它太可怕了,但你可以说这是一种精神锻炼:
mctunoxg4#
接受的答案使用
wc_get_price_decimals
过滤器在购物车页面、结帐页面和感谢页面上全局更改小数位数。对于我的用例,结帐页面条件是OK的(因为没有显示购物车商品价格),但对于购物车页面,我只需要购物车总计中的2位小数,购物车商品中的不是。要在购物车项目中保留3位小数(来自WC设置),并在购物车总计中显示2位小数,您可以在特定购物车页面操作中依次
add
和remove
所需的筛选器:您也可以对不同的部分使用相同的方法,使用不同的操作。