You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:33:08