Php 从Woocommerce中的自定义发货折扣中排除用户角色
根据答案代码,我修改了它,以便为每个卖家增加运费折扣Php 从Woocommerce中的自定义发货折扣中排除用户角色,php,wordpress,woocommerce,hook-woocommerce,shipping-method,Php,Wordpress,Woocommerce,Hook Woocommerce,Shipping Method,根据答案代码,我修改了它,以便为每个卖家增加运费折扣 add_filter( 'woocommerce_package_rates', 'custom_shipping_methods', 10, 2 ); function custom_shipping_methods( $rates, $package ) { $reduction_cost_percentage = 30; // Discount percentage foreach( WC()->cart->get_cart
add_filter( 'woocommerce_package_rates', 'custom_shipping_methods', 10, 2 );
function custom_shipping_methods( $rates, $package ) {
$reduction_cost_percentage = 30; // Discount percentage
foreach( WC()->cart->get_cart() as $cart_item ){
$in_cart_product_id = $cart_item['product_id'];
$cart_seller_id = get_post_field('post_author', $in_cart_product_id);
$cart_seller_meta = get_userdata($cart_seller_id);
$cart_seller_roles = $cart_seller_meta->roles;
if($cart_seller_roles[0] == 'seller'){
foreach( $rates as $rate_key => $rate ){
if( $rate->method_id != 'free_shipping'){
$rates[$rate_key]->cost = $rates[$rate_key]->cost * ((100-$reduction_cost_percentage) / 100);
return $rates;
}
}
}
}
}
现在我想从某个角色中排除此折扣,例如
seller\u 2
。如何执行此操作?您的代码中存在一些错误和疏忽,请尝试以下操作:
add_filter( 'woocommerce_package_rates', 'custom_shipping_methods', 10, 2 );
function custom_shipping_methods( $rates, $package ) {
// Loop through cart items for the current package
foreach( $package['contents'] as $cart_item ){
$seller_id = get_post_field('post_author', $cart_item['product_id']);
$seller_data = get_userdata($seller_id);
// Excluding product 'seller' user role
if ( ! empty($seller_data) && is_array($seller_data->roles) && in_array('seller', $seller_data->roles) ) {
return $rates; // stop the loop and return normally the shipping rates
}
}
$percentage = 30; // <== Set your discount percentage
$discount_rate = $percentage / 100;
// Loop through shipping rates for the current package when seller user role is not found
foreach( $rates as $rate_key => $rate ){
// Not for free shipping
if( $rate->method_id != 'free_shipping' ){
// Change rate cost
$rates[$rate_key]->cost = $rate->cost * $discount_rate;
$taxes = array(); // Initializing
// change taxes rate cost (if enabled)
foreach ($rate->taxes as $key => $tax){
if( $tax > 0 ){
$taxes[$key] = $tax * $discount_rate;
$has_taxes = true;
}
}
// Change taxes cost
if( $has_taxes ) {
$rates[$rate_key]->taxes = $taxes;
}
}
}
return $rates;
}
add_filter('woocommerce_package_rates','custom_shipping_methods',10,2);
函数自定义装运方法($rates,$package){
//循环查看当前包的购物车项目
foreach($package['contents']作为$cart\u项目){
$seller_id=get_post_字段('post_author',$cart_item['product_id');
$seller\u data=获取用户数据($seller\u id);
//不包括产品“卖方”用户角色
如果(!empty($seller\u data)&&is\u数组($seller\u data->roles)&&in\u数组($seller',$seller\u data->roles)){
return$rates;//停止循环并正常返回运费
}
}
$percentage=30;//$rate){
//不是免费送货的
如果($rate->method\u id!='free\u shipping'){
//变更率成本
$rates[$rate\u key]->cost=$rate->cost*$discount\u rate;
$taxes=array();//正在初始化
//更改税率成本(如果启用)
foreach($rate->taxes as$key=>$tax){
如果($tax>0){
$taxes[$key]=$tax*$折扣率;
$has_taxes=true;
}
}
//改变税收成本
如果($有税){
$rates[$rate_key]->taxes=$taxes;
}
}
}
返回美元汇率;
}
代码进入活动子主题(活动主题)的function.php文件。它应该有效
清除装运缓存:
- 您需要清空购物车,以清除缓存的配送数据
- 或者在“配送设置”中,您可以禁用/保存任何配送方法,然后启用“退回/保存”