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." </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;
}