为了账号安全,请及时绑定邮箱和手机立即绑定

如何限制一周中某些日子的 WooCommerce 送货区域

如何限制一周中某些日子的 WooCommerce 送货区域

PHP
繁星coding 2023-07-08 17:47:41
我需要在周日隐藏 WooCommerce Shipping zone_id=1 和 Shipping zone_id=3。提出了这段代码:// Hide $15 & $25 shipping rates on Sundayadd_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'        )    );我没有任何运输类别,也不明白它们是什么。可能需要替换更多代码来替换隐藏运输区域的运输类别,但我不知道该代码是什么。请帮助表示赞赏。
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

代码包含

  • 在特定的一天

  • 未设置$rates[$rate_key]某些区域 ID

注释并添加到代码中的解释

function filter_woocommerce_package_rates( $rates, $package ) {

    /* SETTINGS */

    

    // Zone ID's

    $hide_zones = array ( 1, 3 );

    

    $on_day = 'Sunday';

    

    /* END SETTINGS */

    

    // Shipping zone

    $shipping_zone = wc_get_shipping_zone( $package );

    

    // Get zone ID

    $zone_id = $shipping_zone->get_id();

    

    // set the default timezone to use. Available since PHP 5.1

    date_default_timezone_set('UTC');

    

    // l - A full textual representation of the day of the week

    $day_of_the_week = date( 'l' );


    // True

    if( $day_of_the_week == $on_day ) {

        // In array

        if ( in_array( $zone_id, $hide_zones ) ) {

            // Loop

            foreach ( $rates as $rate_key => $rate ) {

                // Unset

                unset( $rates[$rate_key] );

            }

        }

    }

    

    return $rates;

}

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


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信