WooCommerce:获取选中配送方式成本及代码乘法无输出问题咨询
WooCommerce配送成本相关问题解答
1. 获取WooCommerce中已选中配送方式的成本
要拿到用户选中的配送方式成本,你可以借助WooCommerce的会话数据和配送费率对象来实现,具体操作如下:
- 先获取用户选中的配送方式ID:
$chosen_methods = WC()->session->get('chosen_shipping_methods'); - 接着从当前包裹的配送费率集合里匹配对应的对象,提取成本:
if ( ! empty( $chosen_methods ) ) { $chosen_method = reset( $chosen_methods ); $shipping_packages = WC()->shipping()->get_packages(); foreach ( $shipping_packages as $package ) { foreach ( $package['rates'] as $rate_id => $rate ) { if ( $rate_id === $chosen_method ) { $selected_shipping_cost = $rate->cost; break; } } } }
这样$selected_shipping_cost就是纯数值类型的配送成本了。
2. 关于乘法运算无输出的问题
你写的$price = (wc_price($selectedShipping->cost)*1.15);之所以没输出,核心问题是**wc_price()返回的是带格式的HTML字符串**(比如包含货币符号、千分位分隔符甚至HTML标签),不是纯数字。用字符串和数字做乘法,PHP会尝试把字符串转成数字,但如果字符串里有非数字内容(比如$、€或者逗号),转换后大概率变成0或者直接报错,自然出不了正确结果。
正确的做法是先对原始成本数值做乘法,再用wc_price()格式化:
// 先算原始数值的1.15倍,再格式化输出 $price = wc_price( $selectedShipping->cost * 1.15 );
另外还要确认$selectedShipping是有效的WC_Shipping_Rate对象,如果这个对象没正确获取到,$selectedShipping->cost也会是无效值,导致运算失败。可以加个判断确保安全:
if ( isset( $selectedShipping->cost ) && is_numeric( $selectedShipping->cost ) ) { $price = wc_price( $selectedShipping->cost * 1.15 ); echo $price; // 别忘了输出才能看到结果哦 } else { echo '未获取到有效的配送成本'; }
内容的提问来源于stack exchange,提问作者Jonny B'Good
相关产品推荐
相关产品推荐

