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

WooCommerce变量商品表单缺失:首件/单件商品无<form>标签

问题诊断与解决方案

问题原因

你当前的代码存在两个核心问题导致变量商品表单异常:

  • 缓冲区处理逻辑错误:使用ob_end_flush()直接输出缓冲区内容,再将$html置空,打破了WooCommerce钩子的返回值机制——钩子要求通过返回值传递修改后的HTML,而非直接输出。首件/唯一变量商品时,WooCommerce内部的表单渲染缓冲和你的自定义缓冲发生冲突,导致表单标签与内部控件分离。
  • 不必要的文件引入:require_once '/includes/wc-template-functions.php'使用了错误的绝对路径,且WooCommerce初始化时已自动加载该文件,这个判断完全多余。

另外,is_cart()的判断范围太宽泛,可能影响购物车页面的其他商品循环,建议精准限定为追加销售循环。

修复后的代码

add_filter( 'woocommerce_loop_add_to_cart_link', 'add_quantity_fields', 10, 2 );
function add_quantity_fields( $html, $product ) {
    // 仅在购物车页面的追加销售循环中生效
    if ( is_cart() && wc_get_loop_prop( 'name' ) === 'upsells' ) {
        ob_start();
        echo '<div class="add-to-cart-container">';
        woocommerce_template_single_add_to_cart();
        echo '</div>';
        // 捕获缓冲区内容并赋值给$html,替换原输出
        $html = ob_get_clean();
    }
    return $html;
}

额外说明

  • 替换ob_end_flush()为ob_get_clean()后,所有渲染内容都会通过钩子返回值传递,完全遵循WooCommerce的输出流程,避免缓冲冲突。
  • 用wc_get_loop_prop('name') === 'upsells'精准限定追加销售循环,防止影响购物车页面的其他商品模块(比如购物车商品列表)。
  • 移除无效的文件引入逻辑,减少潜在错误点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:25:21