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

WooCommerce结账字段自定义代码无效问题求助

WooCommerce自主定价模式下结账字段精简方案

问题情况

我店铺做免费教程,用「自主定价(Name Your Price)」模式,只交付文件,所以结账页面要尽量精简,删掉没用的字段。用代码片段插件跑了移除字段的代码,虽然echo "Download"能输出说明代码执行了,但字段还是在;把required设成false也没用。接下来还想实现:用户定价大于0(也就是捐赠)的时候才显示邮箱字段。

问题根源

你代码里先unset删了字段,之后又去改这些已删除字段的required属性,这完全是无效操作——字段都没了,修改不存在的元素自然没用。另外,可能是钩子优先级不够,你的代码被主题或其他插件的修改给覆盖了。

修正后的移除字段代码

add_filter( 'woocommerce_checkout_fields', 'custom_remove_woo_checkout_fields', 999 );

function custom_remove_woo_checkout_fields( $fields ) {
    // 批量移除账单字段
    $billing_fields = [
        'billing_first_name', 'billing_last_name', 'billing_company',
        'billing_address_1', 'billing_address_2', 'billing_city',
        'billing_postcode', 'billing_country', 'billing_state',
        'billing_phone', 'billing_email'
    ];
    foreach ( $billing_fields as $field ) {
        unset( $fields['billing'][ $field ] );
    }

    // 批量移除配送字段
    $shipping_fields = [
        'shipping_first_name', 'shipping_last_name', 'shipping_company',
        'shipping_address_1', 'shipping_address_2', 'shipping_city',
        'shipping_postcode', 'shipping_country', 'shipping_state'
    ];
    foreach ( $shipping_fields as $field ) {
        unset( $fields['shipping'][ $field ] );
    }

    // 删掉订单备注
    unset( $fields['order']['order_comments'] );

    return $fields;
}
  • 给钩子加了999的优先级,确保你的代码在其他修改结账字段的代码之后执行,避免被覆盖。
  • 用循环批量删字段,不再做修改已删除字段的无用操作,逻辑更清晰。

实现「定价大于0时显示邮箱」的功能

要结合前端JS监听价格变化,控制字段显示,同时后端做验证防止漏洞:

前端控制代码(加到主题footer或代码插件)

jQuery(document).ready(function($) {
    // 替换成你自主定价输入框的实际name属性
    const priceInput = $('input[name="your-price"]');
    // 邮箱字段容器的选择器,默认是#billing_email_field
    const emailField = $('#billing_email_field');

    // 页面加载先隐藏邮箱
    emailField.hide();

    // 监听价格输入变化
    priceInput.on('input change', function() {
        const inputPrice = parseFloat($(this).val()) || 0;
        if (inputPrice > 0) {
            emailField.show();
            $('#billing_email').prop('required', true);
        } else {
            emailField.hide();
            $('#billing_email').prop('required', false);
        }
    });
});

后端验证代码(防止用户绕过前端验证)

add_action('woocommerce_checkout_process', 'custom_check_donation_email');

function custom_check_donation_email() {
    // 替换成你自主定价字段的实际name属性
    $donationAmount = isset($_POST['your-price']) ? floatval($_POST['your-price']) : 0;
    if ($donationAmount > 0 && empty($_POST['billing_email'])) {
        wc_add_notice('捐赠时请填写邮箱地址', 'error');
    }
}

内容的提问来源于stack exchange,提问作者Minutepapillon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:15:19