【问题标题】:WooCommerce additional fees based on purchased quantity for specific productsWooCommerce 根据特定产品的购买数量收取额外费用
【发布时间】:2021-05-15 16:45:05
【问题描述】:

这是我目前拥有的代码:

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);
    }

}

我想做的是:

  • 如果 Pizza Burger 产品在购物车中,则应为每个数量添加干冰费和材料费。

  • 如果冷冻肉汁产品在购物车中,则应为每个数量添加干冰费和材料费。

  • 如果比萨汉堡和冷冻肉汁产品都在购物车中,则应为每个数量添加干冰费和材料费。

我在这里做错了什么?

当这个 sn-p 被激活时,它只对 Gravy 起作用。更改 Pizza Burgers 的数量不会影响新费用。

【问题讨论】:

    标签: php woocommerce cart product-quantity fee


    【解决方案1】:

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

    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 文件中。它应该可以工作。

    【讨论】:

    • 那肯定更好,但还是有问题。如果 Gravy 数量为 2 (ibb.co/JC8wzTG),它会更改 Pizza Burger 和 Gravy 的费用金额,但如果在 Pizza Burger 上更改它,则不会执行任何操作 (ibb.co/Vx1G2Lb)。 PS - 感谢您的快速回复! --- 等等,我认为那只是保存时未更新的文件。正在重试,将更新!
    • 缺少一个 ;在$pizza_ice = $gravy_ice = 27 的末尾,修复了这个问题,但它仍然存在问题。 Gravy x2 和 Pizza x1 (ibb.co/XZvcxfd) -- Gravy x1 和 Pizza x2 (ibb.co/WK82VKh) -- 看起来它不适用于正确的数量?
    • 不确定发生了什么我现在在您的代码中没有看到这种情况,但是肉汁的 add_fee() 运输材料调用了 Pizza_qty * gravy_mat - 将其更改为 gravy_qty 并且现在可以使用。再次感谢!
    • @Trisha 是的,我刚刚在$pizza_ice = $gravy_ice = 27 中添加了缺少的;……对于'$pizza_qty * $gravy_mat',它已经更新了……很高兴它终于可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2021-03-17
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多