Php 如何从一周中的某几天开始限制商业航运区

Php 如何从一周中的某几天开始限制商业航运区,php,wordpress,date,woocommerce,shipping-method,Php,Wordpress,Date,Woocommerce,Shipping Method,我需要在周日隐藏商业配送区\ id=1和配送区\ id=3 我偶然发现并想出了以下代码: // Hide $15 & $25 shipping rates on Sunday add_filter('woocommerce_package_rates', 'amano_hide_shipping_method_on_sunday', 10, 2); function amano_hide_shipping_method_on_sunday($available_shipping_me

我需要在周日隐藏商业配送区\ id=1和配送区\ id=3

我偶然发现并想出了以下代码:

// Hide $15 & $25 shipping rates on Sunday

add_filter('woocommerce_package_rates', 'amano_hide_shipping_method_on_sunday', 10, 2);

function amano_hide_shipping_method_on_sunday($available_shipping_methods, $package) {

$date = date("1");
$is_sunday = date('l', $date) == 'Sunday';

if($is_sunday) {

    $hide_when_shipping_class_exist = array(
        42 => array(
            'free_shipping'
        )
    );
    
    $hide_when_shipping_class_not_exist = array(
        42 => array(
            'wf_shipping_ups:03',
            'wf_shipping_ups:02',
             'wf_shipping_ups:01'
        ),
        43 => array(
            'free_shipping'
        )
    );

    $shipping_class_in_cart = array();

    foreach(WC()->cart->cart_contents as $key => $values) {
    $shipping_class_in_cart[] = $values['data']->get_shipping_class_id();
    }

    foreach($hide_when_shipping_class_exist as $class_id => $methods) {
        if(in_array($class_id, $shipping_class_in_cart)){
            foreach($methods as & $current_method) {
                unset($available_shipping_methods[$current_method]);
            }
        }
    }
    foreach($hide_when_shipping_class_not_exist as $class_id => $methods) {
        if(!in_array($class_id, $shipping_class_in_cart)){
            foreach($methods as & $current_method) {
                unset($available_shipping_methods[$current_method]);
            }
        }
    }
    return $available_shipping_methods;
    }
}
然而,我不知道如何定制的一点是:

    $hide_when_shipping_class_exist = array(
        42 => array(
            'free_shipping'
        )
    );

    $hide_when_shipping_class_not_exist = array(
        42 => array(
            'wf_shipping_ups:03',
            'wf_shipping_ups:02',
             'wf_shipping_ups:01'
        ),
        43 => array(
            'free_shipping'
        )
    );
我没有任何航运类,也不明白它们是什么。可能需要替换更多的代码来替换为shipping Zone隐藏shipping类,但我不知道该代码是什么

感谢您的帮助。

代码包含

  • 在某一天
  • 取消设置特定区域ID的
    $rates[$rate\u key]
代码中添加了注释和解释

function filter\u woodcommerce\u package\u费率($rates,$package){
/*背景*/
//区域ID
$hide_zones=数组(1,3);
$on_day=‘星期日’;
/*结束设置*/
//航运区
$shipping\u zone=wc\u get\u shipping\u zone($package);
//获取区域ID
$zone_id=$shipping_zone->get_id();
//设置要使用的默认时区。从PHP5.1开始提供
日期\默认\时区\设置('UTC');
//l-一周中某一天的完整文本表示
$day of theu week=日期('l');
//真的
如果($day\u of\u the\u week==$on\u day){
//排列
if(在数组中($zone\u id,$hide\u zones)){
//环路
foreach($rate作为$rate\u key=>$rate的费率){
//取消
未设置($rates[$rate_key]);
}
}
}
返回美元汇率;
}
添加过滤器('woocommerce\u package\u rates','filter\u woocommerce\u package\u rates',10,2);
代码包含

  • 在某一天
  • 取消设置特定区域ID的
    $rates[$rate\u key]
代码中添加了注释和解释

function filter\u woodcommerce\u package\u费率($rates,$package){
/*背景*/
//区域ID
$hide_zones=数组(1,3);
$on_day=‘星期日’;
/*结束设置*/
//航运区
$shipping\u zone=wc\u get\u shipping\u zone($package);
//获取区域ID
$zone_id=$shipping_zone->get_id();
//设置要使用的默认时区。从PHP5.1开始提供
日期\默认\时区\设置('UTC');
//l-一周中某一天的完整文本表示
$day of theu week=日期('l');
//真的
如果($day\u of\u the\u week==$on\u day){
//排列
if(在数组中($zone\u id,$hide\u zones)){
//环路
foreach($rate作为$rate\u key=>$rate的费率){
//取消
未设置($rates[$rate_key]);
}
}
}
返回美元汇率;
}
添加过滤器('woocommerce\u package\u rates','filter\u woocommerce\u package\u rates',10,2);

Shipping Zone是您将物品运送到的地理区域。运输方式可以是“免费运输”、“本地提货”等。。。Shipping classes可用于对类似类型的产品进行分组,并可由某些装运方法(如固定费率装运)使用,以便为不同类别的产品提供不同的费率。因此,您是否认为要在装运区对面隐藏某些装运方法?还是我错了?您能澄清一下吗?@7uc1f3r,我想阻止id为1和3的配送区在星期天可用。配送区是您运送物品的地理区域。运输方式可以是“免费运输”、“本地提货”等。。。Shipping classes可用于对类似类型的产品进行分组,并可由某些装运方法(如固定费率装运)使用,以便为不同类别的产品提供不同的费率。因此,您是否认为要在装运区对面隐藏某些装运方法?还是我错了?你能澄清一下吗?@7uc1f3r,我只是想阻止id为1和3的装运区在星期天可用。