Remove all Span Tags and class From Woocommerce Price [closed]

There’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)