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

调整WooCommerce单产品页Product Variations位置报错求助

问题分析与解决方案

报错原因

woocommerce_variable_add_to_cart是WooCommerce专为**可变产品(带变体)**设计的函数,它依赖可变产品的变体数据逻辑。你当前的代码在init钩子(全局初始化阶段)就执行了移除和添加动作,没有做产品类型判断,导致所有产品页面都会加载这个函数。对于无变体的简单产品来说,既不需要这个函数,执行时还会因为缺少变体相关数据/上下文直接报错。

修复代码

把代码改成带产品类型判断的版本,并且换到更合适的钩子(确保能获取到当前产品数据):

function move_linked_variation_options() {
    // 仅在单个产品页面且当前产品是可变产品时执行
    if ( is_product() && wc_get_product()->is_type('variable') ) {
        remove_action('woocommerce_variable_add_to_cart', 'woocommerce_variable_add_to_cart', 30);
        add_action('woocommerce_single_product_summary', 'woocommerce_variable_add_to_cart', 15);
        // 优先级设为15是因为:Title优先级5,Price优先级10,Short Description优先级20,这样刚好插在Price和Short Description之间
    }
}
// 用template_redirect钩子,此时产品数据已加载,能准确判断产品类型
add_action('template_redirect', 'move_linked_variation_options');

补充说明

  • 把钩子从init换成template_redirect,因为init阶段当前产品的信息还未加载,无法判断产品类型;
  • 调整优先级为15,刚好卡在Price(优先级10)和Short Description(优先级20)之间,完全符合你的需求;
  • 增加is_product()和is_type('variable')的双重判断,确保只有可变产品的详情页才会执行位置调整,避免影响其他类型产品。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:18:29