WooCommerce 动态最低订单量费用

WooCommerce dynamic minimum order amount based fee

我需要在购物车中设置最低订单费用,这样如果购物车中的产品总计不超过 10 英镑,那么将收取额外费用以使价格达到 10 英镑。

这是我目前拥有的代码,它在购物车阶段运行良好,但是当您到达结帐处时,定价部分由于某种原因不会停止加载并且您无法结帐,有人可以帮忙吗?

来自 functions.php 的代码:

function woocommerce_custom_surcharge() {
  global $woocommerce;
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    $minimumprice = 10;
    $currentprice = $woocommerce->cart->cart_contents_total;
    $additionalfee = $minimumprice - $currentprice;
    if ( $additionalfee >= 0 ) {
        wc_print_notice(
            sprintf( 'We have a minimum %s per order. As your current order is only %s, an additional fee will be applied at checkout.' ,
                wc_price( $minimumprice ),
                wc_price( $currentprice )
            ), 'error'
        );
        $woocommerce->cart->add_fee( 'Minimum Order Adjustment', $additionalfee, true, '' );
    }
}
add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );

增强和 更新 于 2019 年 5 月。

您遇到的无限加载旋转问题是由于 wc_print_notice()woocommerce_cart_calculate_fees[=32= 中使用时造成的] 钩。这似乎是一个错误。

如果你改用wc_add_notice(),问题就没有了但是通知显示了2次。

此外,我已经重新访问了您的 code.The 唯一的解决方案 是将其拆分为 2 个单独的函数 (第三个用于消息):

// Add a custom fee (displaying a notice in cart page)
add_action( 'woocommerce_cart_calculate_fees', 'add_custom_surcharge', 10, 1 );
function add_custom_surcharge( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_cart_calculate_fees' ) >= 2 )
        return;

    $min_price     = 100; // The minimal cart amount

    $current_price = $cart->cart_contents_total;
    $custom_fee    = $min_price - $current_price;

    if ( $custom_fee > 0 ) {
        $cart->add_fee( __('Minimum Order Adjustment'), $custom_fee, true );

        // NOTICE ONLY IN CART PAGE
        if( is_cart() ){
            wc_print_notice( get_custom_fee_message( $min_price, $current_price ), 'error' );
        }
    }
}

// Displaying the notice on checkout page
add_action( 'woocommerce_before_checkout_form', 'custom_surcharge_message', 10 );
function custom_surcharge_message(  ) {
    $min_price     = 100; // The minimal cart amount

    $cart          = WC()->cart;
    $current_price = $cart->cart_contents_total;
    $custom_fee    = $min_price - $current_price;

    // NOTICE ONLY IN CHECKOUT PAGE
    if ( $custom_fee > 0 ) {
        wc_print_notice( get_custom_fee_message( $min_price, $current_price ), 'error' );
    }
}

// The fee notice message
function get_custom_fee_message( $min_price, $current_price ) {
    return sprintf(
        __('We have a minimum %s per order. As your current order is only %s, an additional fee will be applied.', 'woocommerce'),
        wc_price( $min_price ),
        wc_price( $current_price )
    );
}

代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。