WordPressの中でも指折りのコスパがいい予約システムの1つであるWP Booking Systemではオンラインでのクレジット決済が可能など機能が盛りだくさんです。
ただ、もともとが海外のシステムなのでちょいちょいに日本語に対応していないところがあります。特に、オンライン決済時にフォームの中に表示される料金に小数点がついてしまうといった問題があります。
ここでは、この小数点を消す方法についてまとめています。
前提条件
前提として、WP Booking Systemが導入済みである必要があります。WP Booking Systemを導入する方法については下記をご参考ください。
また、オンライン決済用のフォームをWEBサイトに埋め込む基本的な機能や方法については下記をご参考ください。
その他の追加設定については下記をご参考ください。
デフォルトの表示
WEBサイト上のフォームのデフォルトでの表示は次のように合計金額のすべてに小数点2桁が表示されてしまいます。
セッティング(Settings)の中の料金フォーマット(Price Format)ではカンマの有無などの選択はできますが、小数点以下を削る設定は用意されていません。
対処法
対処法はとても簡単で以下のコードを追加するだけです。
//合計金額の小数点以下切り捨て
add_filter('wpbs_price_format', function($formatted_price){
return str_replace('.00','', $formatted_price);
});
WordPress管理画面の「外観」→「テーマファイルエディタ」へと進みます。
「functions.php」にこの記述を追加して「ファイルを更新」をクリックすれば完了です。
WEBサイト上の表示を見てみると小数点以下が非表示になっていることがわかります。
コードの解説
以下は補足です。ここで紹介したコードが何をしているかを簡単に解説します。
//合計金額の小数点以下切り捨て
add_filter('wpbs_price_format', function($formatted_price){
return str_replace('.00','', $formatted_price);
});
add_filterとは?
add_filterとはWordPressで用意されている機能の一つで「フィルターフック」と呼ばれます。functions.phpに記述することで、指定した処理を上書きすることができます。
add_filterは以下のように使用します。
add_filter( string $hook_name , callable $callback , int $priority = 10 , int $accepted_args = 1 ):ture
これだとごちゃごちゃしているのでわかりにくいですが、簡単に書くと以下のようになります。
add_filter( フィルター名 , 実行する関数 , 重要度 , 引数)
パラメーター | 型 | 詳細 | デフォルト値 |
---|---|---|---|
$hook_name | 文字列 | フック名 | – |
$callback | 関数 | 実行する関数 | – |
$priority | 整数 | 重要度 ・数値が小さいほど優先順位が高い ・同じ数値の場合はフィルターに追加された順序で実行。 | 10 |
$accepted_args | 整数 | 関数が受け入れる引数の数 | 1 |
なお、add_filterは最後にreturnで必ず戻り値を返さなければいけません。
つまり何をしている?
つまり今回指定した以下のコードは
add_filter('wpbs_price_format', function($formatted_price){
return str_replace('.00','', $formatted_price);
});
「wpbs_price_format」というフックに対して、function~という関数を実行していることになります。
WP Booking Systemでは料金フォーマットを指定しているフィルターが「wpbs_price_format」です。
関数の中身
続いて実行している関数の中身を見ていきます。
function($formatted_price){
return str_replace('.00','', $formatted_price);
}
$pormatted_priceという引数に対して、str_replaceを使って、「.00」を何もなし「」に置き換えています。
str_replaceとは?
str_replaceとはPHPのメソッドの一つで、検索文字列に一致したすべての文字列を置換する関数です。
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
↓ 簡単に書くと次のようになります。
str_replace( 検索文字, 置換する文字, 対象, マッチした個数を代入 )
(参考) PHP公式 str_replace