当前位置: 首页 > 知识库问答 >
问题:

用Woocommerce中的储蓄金额和百分比替换销售产品价格

糜凯泽
2023-03-14

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

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;
}

档案页折扣:

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

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

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

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

共有1个答案

梁豪
2023-03-14

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

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文件中。经过测试并起作用。

 类似资料:
  • 我有大约10个产品和接近200个变体每一个。我需要更新特定产品的销售价格,包括它的所有变化。 问题是: 所有的变种都有不同的价格。未输入销售价格-所有销售价格输入框均为空。 我需要一个SQL解决方案运行和更新所有特定产品的销售价格,采取常规价格并从中扣除350,或 任何其他方式,我不知道在这个阶段,因为我已经尝试了许多解决方案,包括Woocommerce内置的解决方案“设置销售价格”,再次不工作,

  • 我目前有一个表单,管理员可以在一个屏幕内批量更新产品的销售价格。 提交表格时,我只需使用这样的update_post_meta: 这将更新_sale_price元键。当我进入管理检查这一点,新的销售价格已经插入。当我在前端查看产品时,该产品未标记为正在销售。我必须回去重新保存产品。 我的问题是,伍兹商业是否添加了一些其他meta_key来标记产品在售?我在数据库中为所有插入的自定义字段进行了一次挖

  • 我有一个Woocommerce商店,里面有各种各样的产品。 我要给所有产品打八折,属于产品类别Cuckoo 现在我所要做的就是在我的functions.php中设定一个销售价格 它的做法如下: 如果我在计算后var_dump$sale_price的结果,我会得到正确的答案,但是前端的价格显示会击出正常价格,并将销售价格显示为正常价格。 是否有一个钩子/过滤器可以用来实现这一点? 我还尝试通过以下方

  • 问题内容: 我在主题中有此代码以显示价格后的百分比,并且在WooCommerce v2.6.14中运行良好。 但是此代码段在WooCommerce 3.0+版本上不再起作用。 我该如何解决? 这是该代码: 问题答案: 更新 -2019 (避免四舍五入的价格问题) -2017 (避免百分比值) 在WooCommerce 3.0+中,该钩子已替换为另一个钩子,该钩子现在具有3个参数(但不再有该 参数)

  • 当存在销售价格时,如何用销售价格替换常规价格 我尝试使用此代码 但当产品不在销售时,可见的价格是0.00

  • 重新创建此问题的步骤: 创建可变产品 我正在使用Woocommerce v2。6.14和Wordpress v4。7.6. 如果我尝试检查