Home > OS >  Excessive DOM elements Currency Symbol
Excessive DOM elements Currency Symbol

Time:02-20

When I run pagespeed insight, this <span >cause Excessive Dom Elements. I tried the following methods but to no avail. Many have encountered these issue but no one has a solution.


add_filter('woocommerce_currency_symbol', 'change_existing_currency_symbol', 10, 2);

function change_existing_currency_symbol( $currency_symbol, $currency ) {
     switch( $currency ) {
          case 'AUD': $currency_symbol = 'AUD'; break;
     }
     return $currency_symbol;
}


include_once __DIR__ . '/theme-includes/theme-functions.php';

And this

add_filter( 'formatted_woocommerce_price', 'span_custom_prc', 10, 5 );

function span_custom_prc( $number_format, $price, $decimals, $decimal_separator, $thousand_separator)
{
    return "<span class='woocommerce-Price-amount amount'>".$number_format."&nbsp;</span>";
}

CodePudding user response:

Use the below code snippet in your active theme functions.php.

Tested OK with WooCommerce 6

add_filter('wc_price', 'custom_wc_price', 10, 5);

/**
 * Filters the string of price markup.
 *
 * @param string       $return            Price HTML markup.
 * @param string       $price             Formatted price.
 * @param array        $args              Pass on the args.
 * @param float        $unformatted_price Price as float to allow plugins custom formatting. Since 3.2.0.
 * @param float|string $original_price    Original price as float, or empty string. Since 5.0.0.
 */
function custom_wc_price($return, $price, $args, $unformatted_price, $original_price) {
    $args = apply_filters(
            'wc_price_args',
            wp_parse_args(
                    $args,
                    array(
                        'ex_tax_label' => false,
                        'currency' => '',
                        'decimal_separator' => wc_get_price_decimal_separator(),
                        'thousand_separator' => wc_get_price_thousand_separator(),
                        'decimals' => wc_get_price_decimals(),
                        'price_format' => get_woocommerce_price_format(),
                    )
            )
    );

    $original_price = $price;

    // Convert to float to avoid issues on PHP 8.
    $price = (float) $price;

    $unformatted_price = $price;
    $negative = $price < 0;

    /**
     * Filter raw price.
     *
     * @param float        $raw_price      Raw price.
     * @param float|string $original_price Original price as float, or empty string. Since 5.0.0.
     */
    $price = apply_filters('raw_woocommerce_price', $negative ? $price * -1 : $price, $original_price);

    /**
     * Filter formatted price.
     *
     * @param float        $formatted_price    Formatted price.
     * @param float        $price              Unformatted price.
     * @param int          $decimals           Number of decimals.
     * @param string       $decimal_separator  Decimal separator.
     * @param string       $thousand_separator Thousand separator.
     * @param float|string $original_price     Original price as float, or empty string. Since 5.0.0.
     */
    $price = apply_filters('formatted_woocommerce_price', number_format($price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator']), $price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator'], $original_price);

    if (apply_filters('woocommerce_price_trim_zeros', false) && $args['decimals'] > 0) {
        $price = wc_trim_zeros($price);
    }

    $formatted_price = ( $negative ? '-' : '' ) . sprintf($args['price_format'],  get_woocommerce_currency_symbol($args['currency']), $price);
    $return = '<span ><bdi>' . $formatted_price . '</bdi></span>';

    if ($args['ex_tax_label'] && wc_tax_enabled()) {
        $return .= ' <small >' . WC()->countries->ex_tax_or_vat() . '</small>';
    }


    return $return;
}
  • Related