【问题标题】:WooCommerce additional fees based on QuantityWooCommerce 基于数量的额外费用
【发布时间】:2020-06-27 20:32:06
【问题描述】:

这是我想要实现的过程: 1.产品页面有一个复选框,用户可以决定是否在产品旁边添加自定义服务 2.如果用户选中该框,它会在购物车中添加自定义费用,但它基于产品数量 例如:如果用户在购物车中添加了 2 件相同的产品,并且选中该复选框,它会自动将 2x 自定义费用添加到购物车中。

谁能帮我解决这个问题? (我尽量少用插件,所以尽量通过 php sn-p 来实现)

这是我的代码(它增加了一次自定义费用):

<?php
function transfer_fee() {
    if ( has_term( 'transfer', 'product_cat' ) ) {
        echo '<label><input type="checkbox" name="transfer" value="No">Add transfer (1 USD / person)</label>';
    } elseif {
        echo 'No transfer';
    }
}
add_action( 'woocommerce_before_add_to_cart_quantity', 'transfer_fee' );

function store_transfer_fee( $cart_item, $product_id ) {
    if( isset( $_POST['transfer'] ) ) $cart_item['transfer'] = $_POST['transfer'];
     return $cart_item;
}
add_filter( 'woocommerce_add_cart_item_data', 'store_transfer_fee', 10, 2 );

function add_checkout_transfer_fee() {
     foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
                if ( isset( $cart_item['transfer'] ) ) {
                        $itsagift = true;
                        break;
                }
        }
        if ( $itsagift == true ) WC()->cart->add_fee( 'Transfer', 1 );
}
add_action( 'woocommerce_cart_calculate_fees', 'add_checkout_transfer_fee' );
?>

【问题讨论】:

    标签: woocommerce cart checkout fee


    【解决方案1】:

    假设你是这个意思?

    // Add checkbox before add to cart quantity
    function transfer_fee() {
        if ( has_term( 'transfer', 'product_cat' ) ) {
            echo '<label><input type="checkbox" name="transfer" value="No">Add transfer (1 USD / person)</label>';
        } else {
            echo 'No transfer';
        }
    }
    add_action( 'woocommerce_before_add_to_cart_quantity', 'transfer_fee' );
    
    // Add the cart meta data.
    function store_transfer_fee( $cart_item_data, $product_id, $variation_id ) {
        if( isset( $_POST['transfer'] ) ) {
            $cart_item_data['transfer'] = $_POST['transfer'];
        }
        return $cart_item_data;
    }
    add_filter( 'woocommerce_add_cart_item_data', 'store_transfer_fee', 10, 3 );
    
    // Calculate fees
    function add_checkout_transfer_fee( $cart_object ) {
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;
    
        foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            if ( isset( $cart_item['transfer'] ) ) {
                $itsagift = true;
    
                // Get quantity
                $quantity = $cart_item['quantity'];
    
                break;
            }
        }
    
        // Set fee
        $fee = 1;
    
        // True
        if ( $itsagift ) {
            WC()->cart->add_fee( 'Transfer', $fee * $quantity );
        }
    }
    add_action( 'woocommerce_cart_calculate_fees', 'add_checkout_transfer_fee', 10, 1 );
    

    【讨论】:

    • 哦,正是这个!非常感谢您的热心帮助!
    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多