用 Woocommerce 中的节省金额和百分比替换促销产品价格 [英] Replace on sale product price with saving amount and percentages in Woocommerce

查看:80
本文介绍了用 Woocommerce 中的节省金额和百分比替换促销产品价格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用了一些代码来显示 Woocommerce 存档页面上特价产品的折扣价:

I use some code that shows the discounted price on Woocommerce archive pages for on sale products:

add_filter( 'woocommerce_get_price_html', 'display_savings_as_price_and_percentage', 10, 2 );
//add_filter( 'woocommerce_variable_price_html','display_savings_as_price_and_percentage', 10, 2 );
function display_savings_as_price_and_percentage( $price, $product ) {

    if( $product->is_on_sale() && ! is_admin() && ! $product->is_type('variable')){
        $product_price = (float) $product->get_regular_price();
        $sale_price = (float) $product->get_price();
        $save_price = wc_price( $product_price - $sale_price );
        $save_percentage = round( 100 - ( $sale_price / $product_price * 100 ), 1 ) . '%';
        $price .= sprintf( __('<p class="saved-on-sale">Save: %s (%s)</p>', 'woocommerce' ), $save_price, $save_percentage );
    }
    return $price;
}

档案页折扣:

但它不适用于可变产品,我已经尝试了我找到的每个钩子,但我不知道如何使它适用于可变产品.(我在代码中注释掉了变量的钩子).

But it doesn't work for variable products and I've tried with every hook I've found but I cannot figure out how to make it work variable products. (I commented out the hook for the variable in my code).

这就是我想要的:
如果变量的价格跨度为 10-20,折扣为 10-15,我希望像这样显示默认价格:

This is what I would like to have:
If the variable has a price span of 10-20 with a discount making it 10-15 I would like for that to be displayed like this with the default price striked through:

  • 40 - 50 美元
  • $20 - $30
  • 节省:20 美元(40-50%)

如何用节省金额和百分比替换可变产品的促销产品价格?

How can I replace the on sale product price for variable products with saving amount and percentages?

推荐答案

以下代码将处理简单和可变的销售产品:

The following code will handle both simple and variable on sale products:

add_filter( 'woocommerce_get_price_html', 'display_savings_price_and_percentages', 20, 2 );
function display_savings_price_and_percentages( $price_html, $product ) {
    // Only on frontend and for on sale products
    if( is_admin() || ! $product->is_on_sale() )
        return $price_html;

    // Only on archives pages
    if( ! ( is_shop() || is_product_category() || is_product_tag() ) )
        return $price_html;

    // Variable product type
    if( $product->is_type('variable')){
        $percentages = $savings = array(); // Initializing

        // Get all variation prices
        $prices = $product->get_variation_prices();

        // Loop through variation prices
        foreach( $prices['price'] as $key => $price ){
            // Only on sale variations
            if( $prices['regular_price'][$key] !== $price ){
                // Calculate and set in the array the percentage for each variation on sale
                $percentages[] = round(100 - ($prices['sale_price'][$key] / $prices['regular_price'][$key] * 100), 1 );
                // Calculate and set in the array the savings for each variation on sale
                $savings[]     = $prices['regular_price'][$key] - $prices['sale_price'][$key];
            }
        }

        $save_price      = wc_price( max($savings) );

        if( min($percentages) !== max($percentages) ){
            $save_percentage = min($percentages) . '-' . max($percentages) . '%';
            $save_text       = __( 'Save up to:', 'woocommerce' );
        } else {
            $save_percentage = max($percentages) . '%';
            $save_text       = __( 'Save:', 'woocommerce' );
        }
    }
    // All other product types
    else {
        $regular_price   = $product->get_regular_price();
        $sale_price      = $product->get_sale_price();
        $save_price      = wc_price( $regular_price - $sale_price );
        $save_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), 1 ) . '%';
        $save_text       = __( 'Save:', 'woocommerce' );
    }

    return '<p class="saved-on-sale">' . sprintf( '%s %s (%s)', $save_text, $save_price, $save_percentage ) . '</p>';
}

代码位于活动子主题(或活动主题)的 function.php 文件中.经测试有效.

Code goes in function.php file of your active child theme (or active theme). Tested and works.

这篇关于用 Woocommerce 中的节省金额和百分比替换促销产品价格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆