从格式化价格中提取数字以在 WooCommerce 中进行计算

问题描述 投票:0回答:1

我正在使用 Ewout Fernhout 的插件 WooCommerce PDF 发票和装箱单开发自定义发票模板,当我想在发票上创建更详细的产品列表时,我遇到了问题。

默认模板中有一个 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€)时,但它没有用,则不返回任何内容或函数的长度值。 (对于第二个变量 -
$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,子字符串第一次出现都会返回长度值)。我已经尝试过参考,但它不起作用......

根本原因可能是什么?

谢谢

php wordpress woocommerce orders subtotal
1个回答
0
投票

更新:

要直接获取非格式化价格,您可以使用:

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()
删除欧元符号和空格
'€'
' '
)这样:

$price = str_replace( array(' ', '€'), array('', ''), floatval( $item['price'] ) );

您将得到一个可以在计算中使用的数字(此处

250

© www.soinside.com 2019 - 2024. All rights reserved.