以前、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>