私は 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 );
}
ソースコード: abstract-WC-Payment-Gateway.php のreducePoints()
89 行目
はget_total()
機能せず、ゼロを返します。
私が間違っていることは何ですか?