[英]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.