Events Manager の金額が小数点以下も吐き出してしまうので、その対策。
この記事の目次
結論:下記を子テーマのfunctions.php に入れる
function filter_em_get_currency_formatted( $formatted_price, $price ){ $pattern = '/[0-9,.]+/u'; if ( $result = preg_match( $pattern, $formatted_price, $matches ) ) { $formatted_price = str_replace( $matches[0] , number_format($price) , $formatted_price ); } return $formatted_price; } add_filter( 'em_get_currency_formatted', 'filter_em_get_currency_formatted', 10, 3 );
内容の説明
em_get_currency_formatted
色々と追っていったら、金額の表示は「em_get_currency_formatted」という関数で処理してるっぽかった。
「em_get_currency_formatted」は em-functions.php で定義されていて、コードを見ると apply_filters が設定されてる。
function em_get_currency_formatted($price, $currency=false, $format=false, $precision = 2){ $formatted_price = ''; if(!$format) $format = get_option('dbem_bookings_currency_format','@#'); if(!$currency) $currency = get_option('dbem_bookings_currency'); $formatted_price = str_replace('@', em_get_currency_symbol(true,$currency), $format); $formatted_price = str_replace('#', number_format( $price, $precision, get_option('dbem_bookings_currency_decimal_point','.'), get_option('dbem_bookings_currency_thousands_sep',',') ), $formatted_price); return apply_filters('em_get_currency_formatted', $formatted_price, $price, $currency, $format); }
これ、渡してる$formatted_priceとか$priceが下記みたいな情報だった。
- $formatted_price = 成型後のHTML
- $price = 元の金額
add_filter を使って書き換え。
コードを見たまんま、数値にあたる部分を抜き取って、もともとの数値をnumber_format して書き換えてあげた。
注意点:フォーマットに数値を入れないこと。
注意点としては、EventManagerの設定の「価格のオプション>通貨の書式」に数字を入れないこと!
デフォルトはたしか下記みたいになってるはず。
@#
変に span とか divとかを入れてクラス名に数値を入れると、そっちにマッチしちゃって動かない。はず。