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とかを入れてクラス名に数値を入れると、そっちにマッチしちゃって動かない。はず。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください