我正在尝试使用wordpress中的Progress Bar插件来创建一个小部件,在购物车下显示他们需要花多少钱才能获得免费送货的进度条。
我需要首先考虑购物车的价值:
global $woocommerce;
$price = $woocommerce->cart->get_cart_total();
其次剥去美元符号并舍入到最接近的整数 ?
第三,将值输出到短代码中,以便正确显示到HTML中。就像现在一样,它输出宽度而不是数字。<span class="red" style="width: .$cartnumber%;">
我需要这个输出一个普通数字,所以它可以使用宽度。以下是到目前为止的代码。
<?php
global $woocommerce;
$total = $woocommerce->cart->get_cart_total();
$cartnumber = str_replace("$", "", $total);
echo do_shortcode('[wppb progress='.$cartnumber.' option=red text="Free Shipping"]');
?>
我已在小部件中启用了PHP执行
答案 0 :(得分:0)
之前我遇到过这个问题,以下是我最后使用的内容。 http://www.php.net/manual/en/class.numberformatter.php
在使用[0-9 \,\ s。] +模式使用preg_match之前。然后我将所有特殊字符和字母替换为空白以获取整数。 (不是一个好的解决方案)
取自http://www.pagecolumn.com/tool/pregtest.htm
的示例代码<?php
$ptn = "/[0-9\,\s\.]+/";
$str = "$9,988,776.65 in the United States";
preg_match($ptn, $str, $matches);
print_r($matches);
?>
<强>输出强>
Array
(
[0] => 9,988,776.65
)
在我意识到这不是一个好的解决方案后,我使用下面的代码将其修改为更简单的解决方案。 来自:Remove non-numeric characters (except periods and commas) from a string
$number = "$9,988,776.65";
echo preg_replace("/[^0-9]/", "", $number);
<强>输出强>
998877665
如果你没有删除千位和十进制符号,它将获得货币的数字格式。
关于进度条,您需要将总计转换为100%。我假设你的公式如下:
(price/free_shipping_minimum)*100
如果结果超过100,则将其设置为100%。如果你不想在百分比中使用小数,则将其转换为int或使用php的round / ceil / floor函数。
http://www.php.net/manual/en/function.round.php
我希望这会有很大的帮助。
答案 1 :(得分:0)
为什么你不使用
WC()->cart->subtotaĺ
返回一个浮点数,因此无需删除$ sign