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)