从格式化价格中提取用于 WooCommerce 计算的数字
Extracting from formatted price the number for calculations in WooCommerce
我正在使用 Ewout Fernhout 的插件 WooCommerce PDF Invoices & Packing Slips 制作自定义发票模板,当我想在发票上创建更详细的产品列表时遇到了问题。
默认模板中有一个 foreach 循环,显示订单中的所有产品:
$items = $this->get_order_items();
if( sizeof( $items ) > 0 ) :
foreach( $items as $item_id => $item ) :
之后,我想根据 $items
以 € 和 % 计算折扣金额。我甩了内容,发现商品价格在$item['price'] (string(119)
),原价在$item['product']->price (string(3))
。我可以回显 $item['price']
的值,但是当我只想从 $item['price']
(例如从 250.00 欧元)获得带有子字符串的价格时,但它是无用的,returns 什么都没有或函数的长度值。 (使用第二个变量 - $item['product']->price
,我没有问题)…
$price = $item['price'];
echo $price.'<br/>';
echo strlen($price).'<br/>';
echo substr($price,0,10).'<br/>';
echo strlen(trim(substr($price,0,10))).'<br/>';
显示:
250.00€
119
10
(不管我在子串里写10还是2,第一次出现的子串都会return带长度值)。我已经尝试过参考,但它都不起作用......
根本原因可能是什么?
谢谢
更新:
要直接获取非格式化价格,您可以使用:
1) 对于订单行项目,您可以获得 WC_Order_Item_Product 对象:
$item_data = $item['item']->get_data();
$quantity = $item_data['quantity'];
$line_subtotal = $item_data['sub_total'];
$line_total = $item_data['total'];
2) 要获取相关的 WC_Product 对象,请使用:
$product_data = $item['product']->get_data();
$product_price = $product_data['price'];
您可以简单地使用 str_replace()
删除 euro 符号和 spaces ('€'
和 ' '
) 这样:
$price = str_replace( array(' ', '€'), array('', ''), floatval( $item['price'] ) );
You will get a number (here 250
) that you can use in your calculations
我正在使用 Ewout Fernhout 的插件 WooCommerce PDF Invoices & Packing Slips 制作自定义发票模板,当我想在发票上创建更详细的产品列表时遇到了问题。
默认模板中有一个 foreach 循环,显示订单中的所有产品:
$items = $this->get_order_items();
if( sizeof( $items ) > 0 ) :
foreach( $items as $item_id => $item ) :
之后,我想根据 $items
以 € 和 % 计算折扣金额。我甩了内容,发现商品价格在$item['price'] (string(119)
),原价在$item['product']->price (string(3))
。我可以回显 $item['price']
的值,但是当我只想从 $item['price']
(例如从 250.00 欧元)获得带有子字符串的价格时,但它是无用的,returns 什么都没有或函数的长度值。 (使用第二个变量 - $item['product']->price
,我没有问题)…
$price = $item['price'];
echo $price.'<br/>';
echo strlen($price).'<br/>';
echo substr($price,0,10).'<br/>';
echo strlen(trim(substr($price,0,10))).'<br/>';
显示:
250.00€
119
10
(不管我在子串里写10还是2,第一次出现的子串都会return带长度值)。我已经尝试过参考,但它都不起作用......
根本原因可能是什么?
谢谢
更新:
要直接获取非格式化价格,您可以使用:
1) 对于订单行项目,您可以获得 WC_Order_Item_Product 对象:
$item_data = $item['item']->get_data();
$quantity = $item_data['quantity'];
$line_subtotal = $item_data['sub_total'];
$line_total = $item_data['total'];
2) 要获取相关的 WC_Product 对象,请使用:
$product_data = $item['product']->get_data();
$product_price = $product_data['price'];
您可以简单地使用 str_replace()
删除 euro 符号和 spaces ('€'
和 ' '
) 这样:
$price = str_replace( array(' ', '€'), array('', ''), floatval( $item['price'] ) );
You will get a number (here
250
) that you can use in your calculations