如何在WooCommerce中设置本地取货时订单备注为必填项
实现WooCommerce本地取货时订单备注必填的方案
没问题,这个需求完全可以通过WooCommerce的钩子来实现,我给你整理了前端+后端双重验证的方案——既给用户即时反馈,又能彻底防止绕过前端提交的情况:
1. 前端实时验证(给用户友好提示)
这段JavaScript会监听结账页面的配送方式选择变化,选中「本地取货」时自动把订单备注设为必填;切换其他配送方式时取消必填,还会在提交前做最后检查。
你可以把这段代码添加到主题的functions.php文件,或者用自定义插件来添加:
add_action( 'wp_footer', 'local_pickup_require_order_note_js' ); function local_pickup_require_order_note_js() { // 只在结账页面加载脚本 if ( ! is_checkout() || is_wc_endpoint_url() ) return; ?> <script> jQuery(document).ready(function($) { // 本地取货的默认slug是local_pickup,如果你改了别名记得替换 const localPickupSlug = 'local_pickup'; // 页面加载时先检查一次当前配送方式 checkLocalPickupRequirement(); // 监听配送方式切换事件 $('form.checkout').on('change', 'input[name^="shipping_method"]', function() { checkLocalPickupRequirement(); }); // 提交订单前再做一次验证 $('form.checkout').on('submit', function() { if (isLocalPickupSelected() && $('#order_comments').val().trim() === '') { alert('请填写订单备注,方便我们为您准备取货'); $('#order_comments').focus(); return false; } }); // 判断是否选中本地取货 function isLocalPickupSelected() { return $('input[name^="shipping_method"]:checked').val().includes(localPickupSlug); } // 设置订单备注的必填状态 function checkLocalPickupRequirement() { const orderNoteField = $('#order_comments'); if (isLocalPickupSelected()) { orderNoteField.attr('required', 'required'); // 可选:给字段加个红色边框提示 orderNoteField.addClass('required-field'); } else { orderNoteField.removeAttr('required'); orderNoteField.removeClass('required-field'); } } }); </script> <?php }
2. 后端验证(彻底阻止违规提交)
前端验证只是给用户友好提示,懂技术的人可能绕过前端直接提交订单,所以必须加后端验证来兜底:
同样添加到主题functions.php或自定义插件中:
add_action( 'woocommerce_checkout_process', 'local_pickup_require_order_note_backend' ); function local_pickup_require_order_note_backend() { // 获取当前选中的配送方式 $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods'); $local_pickup_slug = 'local_pickup'; // 替换成你实际的本地取货slug // 检查:选中本地取货 + 订单备注为空 if ( ! empty($chosen_shipping_methods) && strpos($chosen_shipping_methods[0], $local_pickup_slug) !== false && empty(trim($_POST['order_comments'])) ) { wc_add_notice( '请填写订单备注,方便我们为您准备取货', 'error' ); } }
小提示
- 如果你在WooCommerce设置里修改过本地取货的配送方式别名,记得把代码里的
local_pickup替换成你实际的slug。 - 前端的提示文本和样式可以根据你的网站风格调整,比如把alert改成更美观的行内提示。
- 建议把代码放到子主题的
functions.php里,避免主题更新时丢失代码。
这样就能完美实现你的需求:只有选择本地取货时,订单备注才会变成必填项,未填写的话既不能提交订单,还会给用户明确的提示。
内容的提问来源于stack exchange,提问作者Mike Devitt
相关产品推荐
相关产品推荐

