折扣百分比文本的WooCommerce“除以零”错误

时间:2019-03-27 07:12:13

标签: woocommerce

我正在使用此代码,尽管已尽力使它工作,但我无法修复在分组产品的归档(商店页面)上出现的“被零除”错误。

这是错误消息: Warning: Division by zero in 这样就可以显示百分比文本:Save: -$18 (-INF%)

错误涉及此行:

$saving_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), 1 ) . '%';

这是完整的代码:

add_filter( 'woocommerce_get_price_html', 'display_sale_price_and_percentage_html', 10, 2 );
function display_sale_price_and_percentage_html( $price, $product ) {

    // sale products on frontend excluding variable products
    if( $product->is_on_sale() && ! is_admin() && ! $product->is_type('variable')) {

    // product prices
    $regular_price = (float) $product->get_regular_price(); // Regular price
    $sale_price = (float) $product->get_price();

    // price calculation and formatting
    $saving_price = wc_price( $regular_price - $sale_price );

    // percentage calculation and formatting
    $precision = 1; // decimals
    $saving_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), 1 ) . '%';

    // display the formatted html price including amount and precentage using a span tag which means displaying it on the same row, if you want this on a new row, change the tag into a paragraph
    $price .= sprintf( __('<span class="saved-sale"> Save: %s <em>(%s)</em></span>', 'woocommerce' ), $saving_price, $saving_percentage );
    }
return $price;
}

该错误显示在分组的产品上。它在简单产品上也能正常工作。我的目标是使此功能适用于所有产品类型(简单,分组,外部和变量)。

我需要我能得到的所有帮助。

1 个答案:

答案 0 :(得分:1)

我认为这是因为分组产品没有$regular_price。您应该添加一些条件来检查$sale_price$regular_price是否为非零。您还可以检查自己是否不在分组产品上,但是检查0还能防止在有免费产品的地方出现被零除的错误。

add_filter( 'woocommerce_get_price_html', 'display_sale_price_and_percentage_html', 10, 2 );
function display_sale_price_and_percentage_html( $price, $product ) {

    // sale products on frontend excluding variable products
    if( $product->is_on_sale() && ! is_admin() && ! $product->is_type('variable')) {

        // product prices
        $regular_price = (float) $product->get_regular_price();
        $sale_price = (float) $product->get_price();

        if( $regular_price > 0 && $sale_price > 0 ) {
            // price calculation and formatting
            $saving_price = wc_price( $regular_price - $sale_price );

            // percentage calculation and formatting
            $precision = 1; // decimals
            $saving_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), 1 ) . '%';

            // display the formatted html price including amount and precentage using a span tag which means displaying it on the same row, if you want this on a new row, change the tag into a paragraph
            $price .= sprintf( __('<span class="saved-sale"> Save: %s <em>(%s)</em></span>', 'your-textdomain' ), $saving_price, $saving_percentage );

        }
    }
    return $price;
}