WooCommerce选择非配送国家后立即显示无可用配送提示的实现方法
问题原因
WooCommerce默认需要收集完整的配送地址字段(邮编、州/省等)生成$formatted_destination后,才会执行配送可用状态的判断,所以仅选择国家时不会触发无配送方式的提示逻辑。
解决步骤
1. 修改cart-shipping.php模板逻辑
在你现有woocommerce/cart/cart-shipping.php文件的最顶部(也就是原有代码中定义$formatted_destination的代码之前),添加以下判断逻辑,优先校验所选国家是否在允许配送的列表内:
// 优先判断配送国家是否在允许配送列表中 $allowed_shipping_countries = WC()->countries->get_shipping_countries(); $user_selected_country = WC()->customer->get_shipping_country(); if (!empty($user_selected_country) && !isset($allowed_shipping_countries[$user_selected_country])) { $all_countries = WC()->countries->get_countries(); // 直接输出自定义的不配送提示 echo sprintf( '<p class="woocommerce-notice woocommerce-notice--error woocommerce-error">很遗憾,我们暂不支持配送到%s。如需帮助请联系客服。</p>', $all_countries[ $user_selected_country ] ); // 跳过后续默认的配送逻辑判断 return; }
添加完成后只要用户选择了国家,就会优先触发该判断,无需等待其他地址字段填写完成。
2. 添加国家切换自动触发更新的JS代码
在主题的自定义JS文件,或者WordPress后台「外观→自定义→额外CSS/JS」的JS输入区域添加以下代码,实现用户切换国家选择框时自动触发配送信息更新:
jQuery(document).ready(function($) { // 适配购物车页面的配送计算器国家切换 $('body').on('change', '#calc_shipping_country', function() { $('button[name="calc_shipping"]').trigger('click'); }); // 适配结账页面的国家切换 $('body').on('change', '#billing_country, #shipping_country', function() { $('body').trigger('update_checkout'); }); });
3. 清理冗余代码
你之前添加的woocommerce_cart_no_shipping_available_html、woocommerce_no_shipping_available_html两个过滤器相关的代码可以直接删除,避免出现重复提示。
修改完成后清空页面缓存即可测试效果。
内容的提问来源于stack exchange,提问作者David Mood
相关产品推荐
相关产品推荐

