Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Woocommerce中的自定义发货折扣中排除用户角色_Php_Wordpress_Woocommerce_Hook Woocommerce_Shipping Method - Fatal编程技术网

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文件。它应该有效

清除装运缓存

  • 您需要清空购物车,以清除缓存的配送数据
  • 或者在“配送设置”中,您可以禁用/保存任何配送方法,然后启用“退回/保存”