Woocommerce plugin formats the price in javascript for Filter Products by Price widget. You may check out the source.
Here, I will try to show you how we can achieve this feature.
Let's create a class named PriceFomatterAsset
in PriceFomatterAsset.php
<?php
use Automattic\Jetpack\Constants;
class PriceFomatterAsset {
/**
* Constructor.
*/
public function __construct() {
add_action('init', [ $this, 'register_scripts']);
add_action( 'wp_enqueue_scripts', [$this, 'enqueue_front_scripts' ]);
}
/**
* Register all Dokan scripts and styles.
*
* @return void
*/
public function register_scripts() {
$suffix = Constants::is_true( 'SCRIPT_DEBUG' ) ? '' : '.min';
$version = Constants::get_constant( 'WC_VERSION' );
wp_register_script( 'accounting', WC()->plugin_url() . '/assets/js/accounting/accounting' . $suffix . '.js', array( 'jquery' ), '0.4.2', true );
wp_register_script( 'wc-jquery-ui-touchpunch', WC()->plugin_url() . '/assets/js/jquery-ui-touch-punch/jquery-ui-touch-punch' . $suffix . '.js', array( 'jquery-ui-slider' ), $version, true );
// Replace according to your plugin and js file location.
wp_register_script( 'welabs_script_price_formatter', your-plugin-url . '/assets/frontend/js/price-formatter.js', array( 'jquery-ui-slider', 'wc-jquery-ui-touchpunch', 'accounting' ), null, true );
wp_localize_script(
'welabs_script_price_formatter',
'welabs_price_formatter_params',
array(
'currency_format_num_decimals' => 2,
'currency_format_symbol' => get_woocommerce_currency_symbol(),
'currency_format_decimal_sep' => esc_attr( wc_get_price_decimal_separator() ),
'currency_format_thousand_sep' => esc_attr( wc_get_price_thousand_separator() ),
'currency_format' => esc_attr( str_replace( array( '%1$s', '%2$s' ), array( '%s', '%v' ), get_woocommerce_price_format() ) ),
)
);
}
/**
* Enqueue front-end scripts.
*
* @return void
*/
public function enqueue_front_scripts() {
// You may apply logic to enqueue this script like did_action.
wp_enqueue_script( 'welabs_script_price_formatter' );
}
}
Now, let's create JS file named price-formatter.js
where we will define a global function welabs_price_format
to format the price according to Woocommerce settings.
window.welabs_price_format = function(price) {
if ( typeof welabs_price_formatter_params === 'undefined' ) {
return false;
}
return accounting.formatMoney( price, {
symbol: welabs_price_formatter_params.currency_format_symbol,
decimal: welabs_price_formatter_params.currency_format_decimal_sep,
thousand: welabs_price_formatter_params.currency_format_thousand_sep,
precision: welabs_price_formatter_params.currency_format_num_decimals,
format: welabs_price_formatter_params.currency_format
});
}
Now, you have to instantiate the PriceFomatterAsset
class. For example
function load_price_formatter_asset() {
new PriceFomatterAsset();
}
add_action( 'plugins_loaded', 'load_price_formatter_asset' );
Now, You are ready to use welabs_price_format
function in any javascript file.
Top comments (0)