繁体   English   中英

Woocommerce 在结帐时禁用运输选项方法

[英]Woocommerce disable the shipping option methods in checkout

在结帐页面上,我正在尝试根据我所在地区的邮政编码禁用运输方式选项。 你可以在这里找到图片 我正在研究 Wordpress 和 PHP 作为后端。

如果邮政编码与地区不匹配,则送货方式将被禁用,并在此处显示文本“”。 我正在使用这段代码:

        $packages = WC()->cart->get_shipping_packages();

        foreach ($packages as $key => $value) {
            $shipping_session = "shipping_for_package_$key";

            unset(WC()->session->$shipping_session);
        }

但是此代码不起作用,它不会禁用运输方式选项。 谁能帮我?

您可以通过woocommerce_package_rates挂钩禁用运输方式。

您可以通过钩子的第二个参数获取邮政编码$package

在下面的示例中,如果邮政编码$postcodes数组中的其中一个不匹配,则禁用运输方式(您也可以通过排除反向应用您的逻辑。如果需要,您还可以检查 state 和国家/地区。 ) .

您可以通过$package获得的所有字段是:

  • $package['destination']['country']
  • $package['destination']['state']
  • $package['destination']['postcode']
  • $package['destination']['city']
  • $package['destination']['address']
  • $package['destination']['address_1']
  • $package['destination']['address_2']

然后:

// disable shipping methods based on postcode
add_filter( 'woocommerce_package_rates', 'disable_shipping_method_based_on_postcode', 10, 2 );
function disable_shipping_method_based_on_postcode( $rates, $package ) {

    // initialize postcodes to match
    $postcodes = array( 12050, 20052, 15600, 45063 );

    // if the customer's postcode is not present in the array, disable the shipping methods
    if ( ! in_array( $package['destination']['postcode'], $postcodes ) ) {
        foreach ( $rates as $rate_id => $rate ) {
            unset( $rates[$rate_id] );
        }
    }
 
    return $rates;
    
}

该代码已经过测试并且可以工作。 将其添加到您的活动主题的功能中。php。

相关答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM