如何在woocommerce签出页面的后端显示计算值

如何在woocommerce签出页面的后端显示计算值,woocommerce,hook-woocommerce,woocommerce-checkout-fields,wordpress-action,Woocommerce,Hook Woocommerce,Woocommerce Checkout Fields,Wordpress Action,我正在为我的公司创建一个网上商店,这是一家银行的子公司。在银行贷款的帮助下,我们希望建立分期付款销售商品的基础设施。通过使用这个,我设法添加了一个选择字段,让买家选择他的贷款计划。这里还有其他领域,但并不重要。我还向这个字段添加了update\u totals\on\u change类,这样当它更改时,整个签出页面将通过ajax刷新。每次贷款计划以这种方式更改时,我都设法在woocommerce\u cart\u calculate\u fees中计算分期付款金额: add_action( 'w

我正在为我的公司创建一个网上商店,这是一家银行的子公司。在银行贷款的帮助下,我们希望建立分期付款销售商品的基础设施。通过使用这个,我设法添加了一个选择字段,让买家选择他的贷款计划。这里还有其他领域,但并不重要。我还向这个字段添加了
update\u totals\on\u change
类,这样当它更改时,整个签出页面将通过ajax刷新。每次贷款计划以这种方式更改时,我都设法在
woocommerce\u cart\u calculate\u 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, get_post_meta($values['product_id'], '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);
}
add\u action('woocommerce\u cart\u calculate\u fees','操纵订单',99);
操作订单($cart)的函数{
如果(!$_POST | |(is_admin()&&!is_ajax())){
返回;
}
$post_data=null;
如果(isset($_POST['POST_data'])){
parse_str($_POST['POST_data'],$POST_data);
}否则{
$post\u data=$\u post;
}
会话_start();
$_会话['payment']=$post_数据['payment'];
如果($post_数据['payment']=='cash')
{
WC()->cart->fees_api()->set_fees(数组());
}
其他的
{
$items=WC()->cart->get_cart_contents();
$cartInfo=array();
foreach($items作为$item=>$value){
$productInfo=array();
数组推送($productInfo,$values['data']->get_id());
数组_push($productInfo,$value['quantity']);
数组推送($productInfo,get_post_meta($values['product\u id','u price',true));
数组推送($productInfo,get_post_meta($values['product\u id','interest',true));
阵列推送($cartInfo,$productInfo);
}
$targetBenefit=7;
$total_price=0;
平均加权利息=0;
对于($i=0;$icart->add_fee('Added Expense:',$Added_Expense);
WC()->购物车->添加费用('贷款金额:',0-$贷款金额);
如果($贷款金额>150000){
wc_添加_通知(uuuu(“您的贷款金额大于最大值,删除某些产品或增加预付款”),“错误”);
}
}
}
函数calPMT($apr,$term,$loan)
{
$term=$term;
$apr=$apr/1200;
$amount=$apr*-$loan*pow((1+apr),$term)/(1-pow((1+apr),$term));
返回轮($金额);
}

我还向签出添加了两个文本只读字段,一个用于
贷款金额
,具有相同的id,另一个用于
分期付款
,也具有相同的id。我想将这两个计算值从量纲操作返回到前端,并在那里显示为两个只读字段的值,每次整个签出页面更新时。有很多有用的事件。可能
update\u checkout
事件最适合我的问题,但我不知道如何将这两个值从
operate\u order
回调返回到前端,并在只读字段中显示。

尝试
woocommerce\u cart\u totals\u before\u order\u total
hook。