更改Woocommerce存款插件支付计划中的小数精度百分比

时间:2018-06-22 21:40:55

标签: php wordpress woocommerce formatting precision

我正在使用Woocommerce Deposits插件。它使用百分比来计算存款和付款。我需要存入和付款的确切金额。我可以计算出确切的百分比以给出确切的金额,但是插件不允许百分比使用小数点。它四舍五入为整数。

示例:我需要28.3465%,它将四舍五入为28%。

我使用下面的代码,使我可以加2个小数位。因此28.3465%将四舍五入为28.35%。我从此更改了class-wc-deposits-plans-admin.php的第133行:

let { variables, strings } = simplified_response
for (let [key, value] of Object.entries(variables)) {
    strings = strings.map(string => string.replace('${' + key + '}', value))
}
simplified_response.strings = strings

对此:

$plan_amounts = array_map( 'absint', $_POST['plan_amount'] );

是否有一个函数或某种方法将4个小数点而不是2个小数点相加?

我在woo的文档中找到了这个,但我不知道。

https://docs.woocommerce.com/wp-content/images/wc-apidocs/function-wc_format_decimal.html

预先感谢

1 个答案:

答案 0 :(得分:3)

您需要基于wc_format_decimal() source code自定义格式功能,该功能默认会处理 4个小数

function wc_four_decimals( $number, $dp = 4 ) {
    $locale   = localeconv();
    $decimals = array( wc_get_price_decimal_separator(), $locale['decimal_point'], $locale['mon_decimal_point'] );

    // Remove locale from string.
    if ( ! is_float( $number ) ) {
        $number = str_replace( $decimals, '.', $number );
        $number = preg_replace( '/[^0-9\.,-]/', '', wc_clean( $number ) );
    }

    return number_format( floatval( $number ), $dp, '.', '' );
}

代码进入您的活动子主题(或活动主题,或在插件文件中)的function.php文件中。经过测试,可以正常工作。

然后您将简单地替换:

$plan_amounts = array_map( 'wc_format_decimal', $_POST['plan_amount'] );

作者:

$plan_amounts = array_map( 'wc_four_decimals', $_POST['plan_amount'] );

要在Woocommerce中以编程方式更改小数精度,您可以使用以下挂钩函数,在其中可以添加任何条件(默认值在Woocommerce属属设置中设置)

add_filter( 'wc_get_price_decimals', 'custom_decimals_precision'){
function custom_decimals_precision($dec){
    $dec = 4; // Four decimals precision

    return $dec; 
}

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。