WooCommerce Dynamic Pricing动态价格表(2021)

优质
小牛编辑
127浏览
2023-12-01

WooCommerce Dynamic Pricing插件可以实现动态价格,比如一个产品买1-10个单价10元,买11-20个单价9元。这个插件缺少一个功能——在产品页面展示动态价格表,本文介绍添加WooCommerce Dynamic Pricing动态价格表的方法。

WooCommerce Dynamic Pricing动态价格表

该插件默认不能在产品页面显示价格表,要将产品加入购物车,再去购物车查看优惠价格,不是很方便。我们来添加一个价格表,以简单产品为例,产品原始单价10元,根据购买数量设置不同的价格,设置如下图所示。

WooCommerce Dynamic Pricing动态价格表

在子主题的functions.php里添加如下代码,可以在产品页面显示动态价格表。

add_filter( 'woocommerce_get_price_html', 'sola_wholesale_price_table', 10, 2 );

function sola_wholesale_price_table( $price, $product ){
    
    if( ! $product instanceof WC_Product || ! is_product() ){
        return $price;
    }

    $pricing_rule_sets = sola_get_pricing_rules( $product );

    if( $pricing_rule_sets ){

        $pricing_rules = sola_format_pricing_rules( $pricing_rule_sets, $product );

        if( $pricing_rules ){

            $output = '<div>';

            foreach( $pricing_rules as $pricing_rule ){
                $output .= '<div><div>'.$pricing_rule['price'].'</div>';
                $output .= '<div>'.$pricing_rule['title'].'</div></div>';
            }

            $output .= '</div>';

            return $output;
        }   
    }

    return $price;
}


function sola_get_pricing_rules( $product ){

    $pricing_rule_sets = get_post_meta( $product->get_id(), '_pricing_rules', true );

    if( $pricing_rule_sets && is_array($pricing_rule_sets) && sizeof($pricing_rule_sets) ){

        $pricing_rule_sets  = array_shift( $pricing_rule_sets );

        return $pricing_rule_sets;
    }

    return false;
}


function sola_format_pricing_rules( $pricing_rule_sets, $product ){

    $pricing_rules = false;

    foreach ( $pricing_rule_sets['rules'] as $pricing_rule_set ){

        /**
         * We have $from, $to, $type and $amount here
         */
        extract( $pricing_rule_set );

        $price          = '';
        $original_price = $product->get_price();

        switch( $type ){

            case 'fixed_price' :
                $price = wc_price( $amount );
                break;

            case 'percentage_discount':
                $price = wc_price( $original_price -  $amount * $original_price * 0.01 );
                break;

            case 'price_discount':
                $price = wc_price( $original_price - $amount );
                break;
        }

        $pricing_rules[] = array(
            'title' => ( '*' == $to )  ? sprintf( "≥ %s pieces", $from) : sprintf( "%s - %s pieces", $from, $to),
            'price' => $price,
        );
    }

    return $pricing_rules;
}

然后根据你的主题添加样式,效果如下图所示。

WooCommerce Dynamic Pricing动态价格表

试用

你可以到任何一个GPL Download网站下载这个插件,注册账号后大部分是免费下载的。如果要获得技术支持,还请购买付费版本。

试用WooCommerceDnyamic Pricing插件