6

我正在使用 WooCommerce 创建一个在线商店,并且我正在添加一个函数,它将把我的数据库的奖励积分更新为absract-wc-payment-gateway.php.

这是我正在做的事情:

  1. 首先,在结帐页面上,用户将点击place order按钮,然后该方法将获得用户奖励积分并用 减去奖励积分get-total(),然后更新到数据库并进入感谢页面。

在此处输入图像描述

  1. 然后,感谢页面将从数据库中获取用户的奖励积分。我将奖励积分值设置为 2000。所以在这种情况下,奖励积分应该减去总积分($50.00)

在此处输入图像描述

这是我的代码。当用户单击下订单按钮时​​,它将运行:

global $woocommerce;
$order = new WC_Order($order_id);
$total = $order->get_total();   
$bonusPoint -= (int)$total; //minus total price and calculate the latest bonus point

$updateSql = "UPDATE userdata02 SET bonusPoint ='" .$bonusPoint.  "' WHERE userID = 2147483647";

mysqli_query($link, $updateSql);// update to an int column

if(mysqli_query($link, $updateSql)) {
    echo "Record updated successfully";
} else {
    echo "Error update record: <>" . mysqli_error($link);
}

当用户点击放置按钮时调用该方法:

public function get_return_url( $order = null ) {

    if ( $order ) {
        //$message = "wrong answer";
        //echo "<script type='text/javascript'>alert('$message');</script>";
        $return_url = $order->get_checkout_order_received_url();
    } else {
        $return_url = wc_get_endpoint_url( 'order-received', '', wc_get_page_permalink( 'checkout' ) );
    }

    if ( is_ssl() || get_option('woocommerce_force_ssl_checkout') == 'yes' ) {
        $return_url = str_replace( 'http:', 'https:', $return_url );
    }

    self::reducePoints();  //Call reducePoints();
    return apply_filters( 'woocommerce_get_return_url', $return_url, $order );
}

源代码:abstract-WC-Payment-Gateway.php 的reducePoints()第 89 行

get_total()不起作用,它返回零。

我做错了什么?

4

1 回答 1

4

您需要创建一个对象$order以将其与get_total(). 尝试这个:

global $woocommerce;
$order = new WC_Order($order_id);
$total = $order->get_total(); //Get the total price of the order.
$bonusPoints -= (int)$total; //calculate the new bonusPoints

Update1:​​这只是解决内部数据错误。我们需要$order_id让它发挥作用……</p>

注意:您可以删除global $woocommerce;之前$order = new WC_Order($order_id);因为已经包含在public function reducePoints( ){


Update2 - 好轨道:

删除我的代码:

global $woocommerce;
$order = new WC_Order($order_id); 

然后在代码的第 89 行添加$order

public function reducePoints( $order ){
    global $woocommerce;

    // ...

真的很高兴这行得通……这是一个漫长的搜索……

于 2016-07-11T13:12:00.540 回答