wpformsのStripe決済で日本円の小数点をとる方法

日本円 小数点

以前、wpformsへのStripe決済の日本円の通貨設定について書きましたが、小数点が表示されるので、その修正方法を調べてまとめました。

0.00円という感じで表示されたりします。

ちなみに決済通貨は日本円のみを考えています。複数通貨の決済をする場合は適宜、条件分岐を書いて対応してもらえれば。

そして、詳しいテストは行ってないです。。

また、wpformsのアップデート時には確認、修正をするようにしてください。
今回はwpforms Version 1.6.5 |, wordpress 5.6.2で作業を行ってます。

wordpress側設定

functions.phpで下記を追加

// 桁数を0に
function my_sanitize_amount_decimals($amount){
    $amount=0;
    return $amount;

}
add_filter( 'wpforms_sanitize_amount_decimals','my_sanitize_amount_decimals');

Stripe側の設定

クリックされたときの金額表示の設定がjavascriptで書かれてたので、その設定を上書きします。

HTMLブロックを追加して、下記のコードで
/wp-content/plugins/wpforms/assets/js/wpforms.js
の数字表示設定の関数だけを上書きします。
下の方をちょこっと修正しただけです。

<script>
jQuery(function(){
window.wpforms.numberFormat=function( number, decimals, decimalSep, thousandsSep ) {
  number = ( number + '' ).replace( /[^0-9+\-Ee.]/g, '' );
  var n = ! isFinite( +number ) ? 0 : +number;
  var prec = ! isFinite( +decimals ) ? 0 : Math.abs( decimals );
  var sep = ( 'undefined' === typeof thousandsSep ) ? ',' : thousandsSep;
  var dec = ( 'undefined' === typeof decimalSep ) ? '.' : decimalSep;
  var s;
  var toFixedFix = function( n, prec ) {
    var k = Math.pow( 10, prec );
    return '' + ( Math.round( n * k ) / k ).toFixed( prec );
  };
  
  // @todo: for IE parseFloat(0.55).toFixed(0) = 0;
  s = ( prec ? toFixedFix( n, prec ) : '' + Math.round( n ) ).split( '.' );
  if ( s[0].length > 3 ) {
    s[0] = s[0].replace( /\B(?=(?:\d{3})+(?!\d))/g, sep );
  }
  if ( ( s[1] || '' ).length < prec ) {
    s[1] = s[1] || '';
    s[1] += new Array( prec - s[1].length + 1 ).join( '0' );
  }
  s.pop();//小数点以下けずる
  return s.join("");//小数点を削除
}
});</script>