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

无法在WooCommerce产品页添加结账按钮,求助代码调试

在WooCommerce产品页添加直接结账按钮的修复方案

我看你尝试在产品页添加直接结账按钮但没成功,从你给出的代码片段来看,主要是几个语法和完整性问题导致的,咱们来一步步修复:

你的代码存在的问题

  • 代码里出现了HTML转义字符 ->,PHP里应该直接用 -> 来调用对象方法,这会导致语法错误
  • <script> 标签没有闭合,jQuery代码也不完整,无法正常执行
  • 可能没有正确绑定WooCommerce的钩子,确保函数能在产品页正确触发

修复后的完整方案

这里提供两种可行的实现方式,你可以根据需求选择:

方式1:直接跳转链接(简单高效)

这种方式会生成一个直接链接,点击后自动将产品添加到购物车并跳转到结账页,不需要JS:

function add_direct_checkout_button() {
    // 获取当前产品ID
    $current_product_id = get_the_ID();
    // 获取产品对象
    $product = wc_get_product( $current_product_id );
    
    // 仅针对简单产品生效,如需支持其他类型可修改这里的判断
    if ( $product->is_type( 'simple' ) ) {
        // 构建直接结账的URL
        $direct_checkout_url = add_query_arg( 
            'add-to-cart', 
            $current_product_id, 
            wc_get_checkout_url() 
        );
        ?>
        <a href="<?php echo esc_url( $direct_checkout_url ); ?>" class="button alt custom-checkout-button">直接结账</a>
        <?php
    }
}
// 绑定到添加购物车按钮之后的钩子
add_action( 'woocommerce_after_add_to_cart_button', 'add_direct_checkout_button' );

方式2:AJAX添加后跳转(更流畅)

如果想要先静默添加产品到购物车,再跳转到结账页,可以用AJAX实现:

function add_ajax_checkout_button() {
    $current_product_id = get_the_ID();
    $product = wc_get_product( $current_product_id );
    
    if ( $product->is_type( 'simple' ) ) {
        $checkout_url = WC()->cart->get_checkout_url();
        ?>
        <button class="button alt custom-checkout-button" data-product-id="<?php echo $current_product_id; ?>">直接结账</button>
        
        <script>
            jQuery(document).ready(function($) {
                $('.custom-checkout-button').on('click', function(e) {
                    e.preventDefault();
                    var productId = $(this).data('product-id');
                    
                    // AJAX请求添加产品到购物车
                    $.ajax({
                        url: '<?php echo esc_url( admin_url('admin-ajax.php') ); ?>',
                        type: 'POST',
                        data: {
                            action: 'woocommerce_add_to_cart',
                            product_id: productId,
                            quantity: 1
                        },
                        success: function() {
                            // 跳转结账页
                            window.location.href = '<?php echo esc_url( $checkout_url ); ?>';
                        },
                        error: function() {
                            alert('添加产品到购物车失败,请重试!');
                        }
                    });
                });
            });
        </script>
        <?php
    }
}
add_action( 'woocommerce_after_add_to_cart_button', 'add_ajax_checkout_button' );

使用注意事项

  • 把代码添加到子主题的functions.php文件中,不要直接修改父主题,避免主题更新后代码丢失
  • 如果需要支持可变产品、分组产品等其他类型,修改代码里的$product->is_type('simple')判断,比如改成in_array( $product->get_type(), array('simple', 'variable') )
  • 添加后记得测试按钮功能,确保产品能正常添加到购物车并跳转到结账页

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:33:41