在Wordpress短代码中为Woocommerce小部件创建动态“免费送货”进度条

时间:2014-03-04 19:18:40

标签: php wordpress woocommerce

我正在尝试使用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("&#36;", "", $total);
echo do_shortcode('[wppb progress='.$cartnumber.' option=red text="Free Shipping"]');
?>

我已在小部件中启用了PHP执行

2 个答案:

答案 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