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

当适用指定配送类别时,如何将WooCommerce结账字段设为必填?

解决WooCommerce中特定配送类别强制结账公司字段必填的问题

需求:当订单中存在属于特定配送类别的商品时,将结账页面的billing_company字段设置为必填项。

原代码的问题分析

你之前的代码逻辑存在两个核心错误:

  1. 尝试通过WC()->session->get( 'product_shipping_class' )获取配送类别:WooCommerce会话中并没有这个默认存储的键,无法直接拿到当前订单的配送类别信息。
  2. 使用get_terms()获取所有配送类别并取第一个判断:这只是获取系统中所有的配送类别集合,和当前购物车的商品完全无关,判断逻辑不成立。

正确实现代码

要实现需求,需要遍历购物车中的所有商品,检查是否有商品属于目标配送类别;同时为了在购物车商品变化时实时更新字段状态,需要配合woocommerce_update_order_review钩子触发字段刷新:

// 检查购物车是否包含指定配送类别的商品
function has_target_shipping_class() {
    $target_class = 'heavy-shipping-class'; // 替换为你的目标配送类别slug
    $class_found = false;

    // 遍历购物车商品
    foreach (WC()->cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        // 获取商品的配送类别slug
        $product_class = $product->get_shipping_class();
        
        if ($product_class === $target_class) {
            $class_found = true;
            break;
        }
    }

    return $class_found;
}

// 修改结账字段必填状态
add_filter('woocommerce_checkout_fields', 'set_billing_company_required_based_on_shipping_class');
function set_billing_company_required_based_on_shipping_class($fields) {
    if (has_target_shipping_class()) {
        $fields['billing']['billing_company']['required'] = true;
    } else {
        // 若没有目标类别商品,恢复默认状态(可选)
        $fields['billing']['billing_company']['required'] = false;
    }
    return $fields;
}

// 购物车变化时刷新结账字段,确保状态实时更新
add_action('woocommerce_update_order_review', 'refresh_checkout_fields_for_shipping_class');
function refresh_checkout_fields_for_shipping_class() {
    // 触发结账字段重新计算
    WC()->session->set('refresh_checkout', true);
}

代码说明

  • has_target_shipping_class()函数:遍历购物车所有商品,逐一检查商品的配送类别slug是否匹配目标值,返回布尔值表示是否存在目标类别商品。
  • set_billing_company_required_based_on_shipping_class()函数:通过woocommerce_checkout_fields钩子修改billing_company的必填状态,根据前面的检查结果动态设置。
  • woocommerce_update_order_review钩子:当购物车商品添加/移除/修改时,触发结账页面字段刷新,确保字段状态实时同步购物车变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:57:37