Display the default discounted price and percentage on Woocommerce products

前端 未结 1 1011
长发绾君心
长发绾君心 2020-12-11 11:59

I am trying to display the percentage discount of a product on Woocommerce. The solution originally provided (linked below) works, however the discount percentage doesn\'t d

相关标签:
1条回答
  • 2020-12-11 12:23

    The linked code works also when there is a default selected variation (on sale) for the variable product and displays the discount percentage correctly…

    Now for the variable product general displayed price range, you can't display a discounted percentage, as all variations should need to be on sale and each variation discounted percentage can be different…

    For selected product variations on sale price, you can also use the following to get the saving percentage:

    // For product variations
    add_filter( 'woocommerce_available_variation', 'custom_variation_price_saving_percentage', 10, 3 );
    function custom_variation_price_saving_percentage( $data, $product, $variation ) {
        $active_price  = $data['display_price'];
        $regular_price = $data['display_regular_price'];
    
        if( $active_price !== $regular_price ) {
            $saving_percentage = round( 100 - ( $active_price / $regular_price * 100 ), 1 ) . '%';
            $data['price_html'] .= sprintf( __('<p class="saved-sale">Save: %s</p>', 'woocommerce' ), $saving_percentage );
        }
        return $data;
    }
    

    Code goes in functions.php file of your active child theme (or active theme).

    Then for simple products you will use:

    // For simple products
    add_filter( 'woocommerce_get_price_html', 'change_displayed_sale_price_html', 10, 2 );
    function change_displayed_sale_price_html( $price, $product ) {
         // Only on sale products on frontend and excluding min/max price on variable products
        if( $product->is_on_sale() && ! is_admin() && $product->is_type('simple') ){
             // Get product prices
             $regular_price = (float) $product->get_regular_price(); // Regular price
             $sale_price = (float) $product->get_price(); // Active price (the "Sale price" when on-sale)
    
             // "Saving Percentage" calculation and formatting
             $precision = 1; // Max number of decimals
             $saving_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), $precision ) . '%';
    
             // Append to the formated html price
             $price .= sprintf( __('<p class="saved-sale">Save: %s</p>', 'woocommerce' ), $saving_percentage );
        }
        return $price;
    }
    

    Code goes in functions.php file of your active child theme (or active theme).

    0 讨论(0)
提交回复
热议问题