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

WooCommerce添加自定义演示产品链接导致变体无法加入购物车问题求助

WooCommerce添加自定义演示产品链接导致变体无法加入购物车问题求助

各位WooCommerce开发者们,我遇到个头疼的问题,想请大家帮忙看看!

我在做一个WooCommerce项目,需求是在产品的加购按钮后面自动显示关联的演示产品链接,提示用户有演示款可用。我用了woocommerce_after_add_to_cart_button这个action钩子,位置显示得倒是很对,在简单产品页面完全正常——既能看到演示链接,也能正常加购产品。但到了变量产品页面就出问题了:不管选什么变体,点加购按钮都没反应,根本没法把变体加入购物车。

我写的代码是这样的:

add_action( 'woocommerce_after_add_to_cart_button', 'find_rf_link_products_function2' ); 
function find_rf_link_products_function2(){ 
    global $product; 
    $product_rf = $product->get_sku(); 
    $product_rf = $product_rf."RF"; 
    $product_id = wc_get_product_id_by_sku( ''.$product_rf.'' ); 
    $linktorf = get_permalink($product_id); 

    if( $product_id ) { 
        $product = wc_get_product( $product_id ); 
        $amountRF = $product->get_stock_quantity(); 
    } 

    if ( $amountRF > 0 ) { 
        $box = "<span class='box'><a href='".$linktorf."'>EX-DEMO AVAILABLE</a></span>"; 
        echo $box; 
    } else { 
        // do nothing 
    } 
}

后来我排查了半天终于找到问题所在:我的函数里重新给全局的$product变量赋值了!当我获取到演示产品ID后,直接用$product = wc_get_product( $product_id );把原来的产品对象替换成了演示产品的对象。而在变量产品页面,WooCommerce的变体选择和加购逻辑是高度依赖这个全局$product变量的,我这么一改直接破坏了原有逻辑,导致变体加购完全失效。

知道问题后修复起来就很简单了:只要不覆盖全局的$product变量,改用其他变量名来存储演示产品对象就行。修复后的代码如下:

add_action( 'woocommerce_after_add_to_cart_button', 'find_rf_link_products_function2' ); 
function find_rf_link_products_function2(){ 
    global $product; 
    $product_rf = $product->get_sku(); 
    $product_rf = $product_rf . "RF"; 
    $product_id = wc_get_product_id_by_sku( $product_rf ); 
    $linktorf = get_permalink($product_id); 
    $amountRF = 0;

    if( $product_id ) { 
        // 改用新变量名存储演示产品对象,避免覆盖全局$product
        $demo_product = wc_get_product( $product_id ); 
        $amountRF = $demo_product->get_stock_quantity(); 
    } 

    if ( $amountRF > 0 ) { 
        $box = "<span class='box'><a href='".$linktorf."'>EX-DEMO AVAILABLE</a></span>"; 
        echo $box; 
    } 
}

我还顺便优化了一点点细节:去掉了没必要的冗余字符串拼接''.$product_rf.'',直接用$product_rf就行;另外在开头初始化了$amountRF为0,避免出现变量未定义的PHP警告。

现在这个代码在简单产品和变量产品页面都能正常工作了——既能正确显示演示产品链接,变量产品也能正常选择变体并加入购物车。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.09 03:03:09