Your question should be specific to WordPress. Generic PHP/JS/SQL/HTML/CSS questions might be better asked at Stack Overflow or another appropriate Stack Exchange network site. Third-party plugins and themes are off-topic for this site; they are better asked about at their developers' support routes.
Closed 5 years ago.
Improve this questionI Want to remove all span Tags and class autour the price
<span class="price">
<span class="woocommerce-Price-amount amount">
<span class="woocommerce-Price-currencySymbol">$</span>690.00</span></span>
Closed. This question is off-topic. It is not currently accepting answers.
Your question should be specific to WordPress. Generic PHP/JS/SQL/HTML/CSS questions might be better asked at Stack Overflow or another appropriate Stack Exchange network site. Third-party plugins and themes are off-topic for this site; they are better asked about at their developers' support routes.
Closed 5 years ago.
Improve this questionI Want to remove all span Tags and class autour the price
<span class="price">
<span class="woocommerce-Price-amount amount">
<span class="woocommerce-Price-currencySymbol">$</span>690.00</span></span>
Share
Improve this question
asked Dec 27, 2019 at 17:40
chouaib achachechouaib achache
111 silver badge3 bronze badges
1 Answer
Reset to default 1There's a few ways to do this, here are two:
Method #1
In your theme (parent or child if you are using a child theme to extend the parent) create a folder structure as follows:
{your_theme_folder}
∟ woocommerce (directory)
∟ single-product (directory)
∟ price.php (copy from wp-content/plugins/woocommerce/templates/single-product/price.php)
Example: {your_theme_folder}/woocommerce/single-product/price.php
This file: price.php
containes the following:
<?php
global $product;
?>
<p class="<?php echo esc_attr( apply_filters( 'woocommerce_product_price_class', 'price' ) );?>">
<?php echo $product->get_price_html(); ?>
</p>
And modify the template to something as per follows:
<?php
global $product;
?>
<p class="<?php echo esc_attr( apply_filters( 'woocommerce_product_price_class', 'price' ) );?>">
<?php echo wc_get_price_to_display( $product ) . $product->get_price_suffix(); ?>
</p>
Method #2
Since $product->get_price_html()
uses the wc_price
function to format the price (which is responsible for all those spans), you could alternatively filter the price return value through apply_filters( 'wc_price', $return, $price, $args, $unformatted_price );
Example:
WARNING this will effect prices everywhere (anything that uses
wc_price()
function) so be sure to wrap your logic in conditional clauses if necessary!
function custom_wc_price( $return, $price, $args, $unformatted_price ) {
// modify the price using: $return, $price, $args, $unformatted_price
// crude example
$return = $unformatted_price;
return $return;
}
add_filter( 'wc_price', 'custom_wc_price', 10, 4 );
Beware that other filters and price transformations take place in the wc_price
function so I recommend looking at the internals of that function in the WooCommerce plugin directory as you may want to run the price back through raw_woocommerce_price
and formatted_woocommerce_price
filters or simply copy across logic responsible for applying decimals separators, thousand separators, currency etc.
See the internals of wc_price
in wp-content/plugins/woocommerce/includes/wc-formatting-functions.php
:
/**
* Format the price with a currency symbol.
*
* @param float $price Raw price.
* @param array $args Arguments to format a price {
* Array of arguments.
* Defaults to empty array.
*
* @type bool $ex_tax_label Adds exclude tax label.
* Defaults to false.
* @type string $currency Currency code.
* Defaults to empty string (Use the result from get_woocommerce_currency()).
* @type string $decimal_separator Decimal separator.
* Defaults the result of wc_get_price_decimal_separator().
* @type string $thousand_separator Thousand separator.
* Defaults the result of wc_get_price_thousand_separator().
* @type string $decimals Number of decimals.
* Defaults the result of wc_get_price_decimals().
* @type string $price_format Price format depending on the currency position.
* Defaults the result of get_woocommerce_price_format().
* }
* @return string
*/
function wc_price( $price, $args = array() ) {
$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(),
)
)
);
$unformatted_price = $price;
$negative = $price < 0;
$price = apply_filters( 'raw_woocommerce_price', floatval( $negative ? $price * -1 : $price ) );
$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'] );
if ( apply_filters( 'woocommerce_price_trim_zeros', false ) && $args['decimals'] > 0 ) {
$price = wc_trim_zeros( $price );
}
$formatted_price = ( $negative ? '-' : '' ) . sprintf( $args['price_format'], '<span class="woocommerce-Price-currencySymbol">' . get_woocommerce_currency_symbol( $args['currency'] ) . '</span>', $price );
$return = '<span class="woocommerce-Price-amount amount">' . $formatted_price . '</span>';
if ( $args['ex_tax_label'] && wc_tax_enabled() ) {
$return .= ' <small class="woocommerce-Price-taxLabel tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>';
}
/**
* 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.
*/
return apply_filters( 'wc_price', $return, $price, $args, $unformatted_price );
}
(NOTE: this answer is not exhaustive)