WooCommerce - get_order() 不起作用,它 returns 为零
WooCommerce - get_order() doesn't work and it returns zero
我正在使用 WooCommerce 创建一个在线商店,我正在添加一个功能,它将我的数据库中的奖励积分更新为 absract-wc-payment-gateway.php
。
这是我正在做的事情:
- 首先,在结帐页面,用户点击
place order
按钮,然后该方法将获得用户的奖励积分并使用get-total()
减去奖励积分,然后更新为数据库并转到感谢页面。
- 然后,感谢页面将从数据库中获取用户的奖励积分。我将奖励积分值设置为 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 );
}
源代码:reducePoints()
第 89 行来自 abstract-WC-Payment-Gateway.php
get_total()
不起作用,它 returns 为零。
我做错了什么?
您需要为 $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
才能让它工作……
注意:您可以在 $order = new WC_Order($order_id);
之前删除 global $woocommerce;
,因为它已包含在 public function reducePoints( ){
中
Update2 - 好曲目:
删除我的代码:
global $woocommerce;
$order = new WC_Order($order_id);
然后在代码的第 89 行添加 $order
:
public function reducePoints( $order ){
global $woocommerce;
// ...
真的很高兴这有效……这是一个漫长的搜索……
我正在使用 WooCommerce 创建一个在线商店,我正在添加一个功能,它将我的数据库中的奖励积分更新为 absract-wc-payment-gateway.php
。
这是我正在做的事情:
- 首先,在结帐页面,用户点击
place order
按钮,然后该方法将获得用户的奖励积分并使用get-total()
减去奖励积分,然后更新为数据库并转到感谢页面。
- 然后,感谢页面将从数据库中获取用户的奖励积分。我将奖励积分值设置为 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 );
}
源代码:reducePoints()
第 89 行来自 abstract-WC-Payment-Gateway.php
get_total()
不起作用,它 returns 为零。
我做错了什么?
您需要为 $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
才能让它工作……
注意:您可以在 $order = new WC_Order($order_id);
之前删除 global $woocommerce;
,因为它已包含在 public function reducePoints( ){
Update2 - 好曲目:
删除我的代码:
global $woocommerce;
$order = new WC_Order($order_id);
然后在代码的第 89 行添加 $order
:
public function reducePoints( $order ){
global $woocommerce;
// ...
真的很高兴这有效……这是一个漫长的搜索……