如何解决如何在woocommerce结帐页面的后端显示计算值
我正在为我的公司创建一个在线商店,该公司是一家银行的子公司。在银行贷款的帮助下,我们希望建立分期销售商品的基础设施。通过使用这个 plugin,我设法添加了一个选择字段,让买方选择他的贷款计划。 还有其他字段,但这里不重要。我还向该字段添加了 update_totals_on_change
类,因此当它更改整个结帐页面时,会通过 ajax 刷新。每次贷款计划以这种方式改变时,我都设法计算了 woocommerce_cart_calculate_fees
的分期付款金额:
add_action( 'woocommerce_cart_calculate_fees','manipulate_order',99 );
function manipulate_order( $cart ) {
if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
return;
}
$post_data=null;
if ( isset( $_POST['post_data'] ) ) {
parse_str( $_POST['post_data'],$post_data );
} else {
$post_data = $_POST;
}
session_start();
$_SESSION['payment'] = $post_data['payment'];
if($post_data['payment'] == 'cash')
{
WC()->cart->fees_api()->set_fees(array());
}
else
{
$items = WC()->cart->get_cart_contents();
$cartInfo = array();
foreach ($items as $item => $values) {
$productInfo = array();
array_push($productInfo,$values['data']->get_id());
array_push($productInfo,$values['quantity']);
array_push($productInfo,get_post_meta($values['product_id'],'_price',true));
array_push($productInfo,'interest',true));
array_push($cartInfo,$productInfo);
}
$targetBenefit = 7;
$total_price = 0;
$average_weighted_interest = 0;
for ($i = 0; $i < count($cartInfo); $i++) {
$total_price += ($cartInfo[$i][1] * $cartInfo[$i][2]);
$average_weighted_interest += $cartInfo[$i][1] * $cartInfo[$i][2] * $cartInfo[$i][3] / 100;
}
$average_weighted_interest = round(100 * $average_weighted_interest / $total_price,2);
$prepayment_percent = $post_data['prepayment'];
$bank_wage_percent = explode("_",$post_data['loan'])[0];
$bank_wage_period = explode("_",$post_data['loan'])[1];
$adjusted_bank_wage_percent = round($bank_wage_percent*(1-$prepayment_percent/100),2);
$increase_percent = round($targetBenefit + $adjusted_bank_wage_percent - $average_weighted_interest,2);
$added_expense = round($total_price * $increase_percent/100,2);
$loan_amount = round((($total_price + $added_expense)-$total_price*$prepayment_percent/100),2);
$_SESSION['loan_amount'] = $loan_amount;
$installment = calPMT(18,$bank_wage_period,$loan_amount);
$_SESSION['installment'] = $installment;
WC()->cart->add_fee('Added Expense: ',$added_expense);
WC()->cart->add_fee('Loan Amount: ',0-$loan_amount);
if($loan_amount > 150000){
wc_add_notice( __( 'Your Loan amount is bigger than maximum,delete some product or increase prepayment' ),'error' );
}
}
}
function calPMT($apr,$term,$loan)
{
$term = $term;
$apr = $apr / 1200;
$amount = $apr * -$loan * pow((1 + $apr),$term) / (1 - pow((1 + $apr),$term));
return round($amount);
}
我还在结帐中添加了另外两个文本只读字段,一个用于具有相同 ID 的 loan_amount
,另一个用于 installment
也具有相同的 ID。我想将这两个计算值从提到的操作返回到前端,并在每次整个结帐页面更新时将它们显示为两个只读字段的值。有一堆有用的事件 here .probably update_checkout
事件最适合我的问题,但我不知道如何将这两个值从 manipulate_order
回调返回到前端并在那里显示在读取- 仅限字段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。