代码之家  ›  专栏  ›  技术社区  ›  Duc Phuli

显示Woocommerce产品的折扣价格和百分比

  •  15
  • Duc Phuli  · 技术社区  · 7 年前

    下图显示了折扣价格和百分比

    我没有找到具有此功能的自定义代码搜索。

    我使用以下代码显示折扣价格,但价格未格式化(缺少货币符号和小数):

    add_filter( 'woocommerce_get_price_html', 'modify_woocommerce_get_price_html', 10, 2 );
    
    function modify_woocommerce_get_price_html( $price, $product ) {
        if( $product->is_on_sale() && ! is_admin() )
            return $price . sprintf( __('<p class="saved-sale">Save: %s</p>', 'woocommerce' ), $product->regular_price - $product->sale_price );
        else
            return $price;
    }
    

    如何显示格式正确的折扣价格? 如何显示折扣百分比?

    欢迎提供任何帮助。

    1 回复  |  直到 7 年前
        1
  •  27
  •   LoicTheAztec    7 年前

    您的代码有点过时,因为woocommerce版本3无法直接访问产品对象属性。相反,您应该使用可用的 WC_Product 方法 .

    设置您将使用的价格格式 wc_price() 专用格式功能。

    现在你可以 (3种可能性) :

    1) 节省的价格:

    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('variable')){
            // 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 price" calculation and formatting
            $saving_price = wc_price( $regular_price - $sale_price );
    
            // Append to the formated html price
            $price .= sprintf( __('<p class="saved-sale">Save: %s</p>', 'woocommerce' ), $saving_price );
        }
        return $price;
    }
    

    2) 储蓄百分比:

    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('variable')){
            // 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 ), 1 ) . '%';
    
            // Append to the formated html price
            $price .= sprintf( __('<p class="saved-sale">Save: %s</p>', 'woocommerce' ), $saving_percentage );
        }
        return $price;
    }
    

    3两者 (折扣价格和百分比) :

    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('variable')){
            // 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 price" calculation and formatting
            $saving_price = wc_price( $regular_price - $sale_price );
    
            // "Saving Percentage" calculation and formatting
            $precision = 1; // Max number of decimals
            $saving_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), 1 ) . '%';
    
            // Append to the formated html price
            $price .= sprintf( __('<p class="saved-sale">Save: %s <em>(%s)</em></p>', 'woocommerce' ), $saving_price, $saving_percentage );
        }
        return $price;
    }
    

    代码进入功能。活动子主题(或活动主题)的php文件。

    已测试并正常工作。