php - WooCommerce 根据特定产品的购买数量收取额外费用

标签 php woocommerce cart product-quantity fee

这是我目前拥有的代码:

add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees');
function add_custom_fees( $cart ){

    if (is_admin() && !defined('DOING_AJAX')) {
        return;
    }

    $pizza_ice = 0;
    $pizza_materials = 0;
    $gravy_ice = 0;
    $gravy_materials = 0;

    $pizza_burger = 293;
    $gravy = 462;
    
    $pizza_in_cart = false;
    $gravy_in_cart = false;

    foreach( $cart->get_cart() as $item ){
        $product_in_cart = $item['product_id'];
        if ( $product_in_cart === $pizza_burger) {
            $pizza_in_cart = true;
        }
        elseif ( $product_in_cart === $gravy) {
            $gravy_in_cart = true;
        }
    }

    if ( $pizza_in_cart != false ) {
        $pizza_ice += $item['quantity'] * 27;
        $pizza_materials += $item['quantity'] * 9.99;

        $cart->add_fee( 'Dry Ice - Pizza Burger', $pizza_ice);
        $cart->add_fee( 'Shipping Materials - Pizza Burger', $pizza_materials);
    }
    elseif ( $gravy_in_cart != false ) {
        $gravy_ice += $item['quantity'] * 27;
        $gravy_materials += $item['quantity'] * 6.99;

        $cart->add_fee( 'Dry Ice - Frozen Gravy', $gravy_ice);
        $cart->add_fee( 'Shipping Materials - Frozen Gravy', $gravy_materials);
    }
    elseif ( $pizza_in_cart != false || $gravy_in_cart != false ) {
        $pizza_ice += $item['quantity'] * 27;
        $pizza_materials += $item['quantity'] * 9.99;

        $cart->add_fee( 'Dry Ice - Pizza Burger', $pizza_ice);
        $cart->add_fee( 'Shipping Materials - Pizza Burger', $pizza_materials);

        $gravy_ice += $item['quantity'] * 27;
        $gravy_materials += $item['quantity'] * 6.99;

        $cart->add_fee( 'Dry Ice - Frozen Gravy', $gravy_ice);
        $cart->add_fee( 'Shipping Materials - Frozen Gravy', $gravy_materials);
    }

}

我想做的是:

  • 如果购物车中有披萨汉堡产品,则应添加每个数量的干冰费和 Material 费。

  • 如果购物车中有冷冻肉汁产品,则应添加每个数量的干冰费和 Material 费。

  • 如果购物车中同时包含披萨汉堡和冷冻肉汁产品,则应为每个数量添加干冰费和 Material 费。

我在这里做错了什么?

当此代码段处于事件状态时,它仅适用于肉汁。更改披萨汉堡的数量不会影响新费用。

最佳答案

您的代码中存在一些错误,请尝试以下操作:

add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees');
function add_custom_fees( $cart ){
    if (is_admin() && !defined('DOING_AJAX')) 
        return;

    ## -- product Ids -- ##    
    $pizza_id = 293;
    $gravy_id = 462;
    
    ## -- dry Ice & Materials fee amounts -- ##  
    $pizza_ice = $gravy_ice = 27;
    $pizza_mat = 9.99;
    $gravy_mat = 6.99;

    $gravy_qty = $pizza_qty = 0; // Initializing

    // Loop through cart items
    foreach( $cart->get_cart() as $item ){
        if ( $item['product_id'] == $pizza_id ) {
            $pizza_qty += $item['quantity'];
        } 
        elseif ( $item['product_id'] == $gravy_id ) {
            $gravy_qty += $item['quantity'];
        }
    }

    if ( $pizza_qty > 0 ) {
        $cart->add_fee( 'Dry Ice - Pizza Burger', $pizza_qty * $pizza_ice );
        $cart->add_fee( 'Shipping Materials - Pizza Burger', $pizza_qty * $pizza_mat );
    }

    if ( $gravy_qty > 0 ) {
        $cart->add_fee( 'Dry Ice - Frozen Gravy', $gravy_qty * $gravy_ice );
        $cart->add_fee( 'Shipping Materials - Frozen Gravy', $gravy_qty * $gravy_mat );
    }
}

代码位于事件子主题(或事件主题)的functions.php 文件中。它应该有效。

关于php - WooCommerce 根据特定产品的购买数量收取额外费用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66163274/

相关文章:

php - Laravel:我可以更改文件夹结构吗

php图片上传无法将实际文件复制到目标文件夹

php - WooCommerce 管理员报告 : Get custom product report based on date range

php - WooCommerce 对结帐字段输入执行操作

php - 如何在 Crinsane 的 LaraveShoppingcart 中更新购物车选项

javascript - 将 PHP 日期转换为 javascript 日期格式

php - 将 PHP 与 Octave 或 Matlab 链接起来

特定产品类别的 Woocommerce 自定义样式?

wordpress - 在 WooCommerce 购物车中添加产品元值作为费用

php - 有没有办法在购物车中显示缺货消息,以具体指示哪些商品已售完?