php 如何根据用户的角色在WooCommerce中调整特定运输方法的运输成本?[副本]

ecfdbz9o  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(107)

此问题已在此处有答案

Apply a discount for a specific user role in Woocommerce(2个答案)
2个月前关闭。
这篇文章是编辑并提交审查22小时前.
我试图改变运费(包率)根据用户的角色。
如何从不含税的总价中管理运输成本?
有一个批发用户类型(wholesale_customer),然后还有其他用户角色(我们称之为“The Rest”),每个人都有相同的规则。
运输成本逻辑:
1.对于批发客户:
1.如果订单小计等于或超过70欧元,他们应该获得免费送货(删除标准运费)。
1.如果订单小计低于70欧元,则应收取10欧元的运费。
1.对于老客户:
1.如果订单小计等于或超过30欧元,他们应该获得免费送货(删除标准运费)。
1.如果订单小计低于30欧元,则应收取5欧元的运费。
您需要根据小计进行此计算,而不添加税。
已尝试以下代码:

// This is the way I try to manage shipping costs for "The rest" user

add_filter('woocommerce_package_rates', 'shipping_costs_for_retailers', 10, 2);
function shipping_costs_for_retailers($rates, $package) {
    $user = wp_get_current_user();
    $user_roles = $user->roles;
    $subtotal = WC()->cart->subtotal;
    if (!in_array('wholesale_customer', $user_roles) && $subtotal < 30) {
        $new_rate = array();
        foreach ($rates as $rate_id => $rate) {
            $new_rate[$rate_id] = $rate;
            $new_rate[$rate_id]->cost += 5;
        }
        return $new_rate;
    }
    return $rates;
}

add_filter('woocommerce_cart_totals_shipping_html', 'message_for_retailers');
function message_for_retailers($html) {
    $user = wp_get_current_user();
    $user_roles = $user->roles;
    $subtotal = WC()->cart->subtotal;
    if (!in_array('wholesale_customer', $user_roles) && $subtotal < 30) {
        $html .= '<p>Shipping cost: $5.00</p>';
    }
    return $html;
}
// This is the way I try to manage shipping costs for wholesale users

add_filter('woocommerce_package_rates', 'shipping_ expenses_ for_wholesalers', 10, 2);
function shipping_ expenses_ for_wholesalers($rates, $package) {
    $user = wp_get_current_user();
    $user_roles = $user->roles;
    $subtotal = WC()->cart->subtotal;
    if (in_array('wholesale_customer', $user_roles) && $subtotal < 70) {
        $new_rate = array();
        foreach ($rates as $rate_id => $rate) {
            $new_rate[$rate_id] = $rate;
            $new_rate[$rate_id]->cost += 10;
        }
        return $new_rate;
    }
    return $rates;
}

add_filter('woocommerce_cart_totals_shipping_html', 'message_for_wholesalers');
function message_for_wholesalers($html) {
    $user = wp_get_current_user();
    $user_roles = $user->roles;
    $subtotal = WC()->cart->subtotal;
    if (in_array('wholesale_customer', $user_roles) && $subtotal < 70) {
        $html .= '<p>Shipping cost: $10.00</p>';
    }
    return $html;
}

我该怎么做才能纠正这个问题?
我应该如何修改我的功能来管理不含税的价格?
你可以看到发生在我身上的事情的截图,当批发客户,在小计没有达到70欧元,但运费被停用,因为总超过70欧元

khbbv19g

khbbv19g1#

在我的回答之前,我澄清了一些关于你的代码的问题,你是在汽车中添加的所有费率中添加+10,例如,如果已经在购物车中添加了20,那么现在它是30,如果有第二次运输税15,那么它将是25,等等,所以10是在所有税中添加,但你在问题中说::“运费将是10欧元”,因此,我们添加一个零(0)所有订单的收费统一费率航运方法,我们添加10收费,我们需要的代码,我给所有步骤below
Step : 1step : 2step : 3step : 4step : 5step : 6step : 7step : 8

<?php
add_filter( 'woocommerce_package_rates', 'custom_shipping_costs_based_on_user_role', 10, 2 );
function custom_shipping_costs_based_on_user_role( $rates, $package ) {
    // Get the current user role
    $current_user = wp_get_current_user();
    $user_role = $current_user->roles[0];

    // Get the order subtotal without taxes
    $subtotal = WC()->cart->subtotal_ex_tax;
    
    if(isset($rates['flat_rate:3'])) {

        // Set the shipping costs based on the user role and subtotal
        if ( $user_role == 'wholesale_customer' ) {
            if ( $subtotal >= 70 ) {
                // Free shipping
                unset( $rates['flat_rate:3'] ); // remove standard shipping rate
            } else {
                // Add €10 shipping cost
                $rates['flat_rate:3']->cost = 10;
            }
        } else {
            if ( $subtotal >= 30 ) {
                // Free shipping
                unset( $rates['flat_rate:3'] ); // remove standard shipping rate
            } else {
                // Add €10 shipping cost
                $rates['flat_rate:3']->cost = 5;
            }
        }
    }
    
    return $rates;
}

相关问题