添加“立即购买”,简化购买流程

默认情况下,wordpress+woocommerce商店购买流程比较长:进入产品详情后,首先要把产品加入购物车,再进入购物车,然后才是进入结账页面填写各种信息,最后完成付款。有些朋友觉得这个过程太繁琐了,这篇文章就是教大家如何在”加入购物车“按钮后面,添加一个”直接购买“按钮,让客户快速进入结账页面,简化购买流程。效果如下图:

准备阶段

首先要确认一下我们有没有安装“Code Snippets”插件。这个插件的功能是让我们不用直接修改系统代码、也不用使用插件,就能直接使用代码添加某些功能。

如上图所示,证明我们已经安装了“Code Snippets”插件。如果没有安装,自己去插件中心搜索“Code Snippets”安装开启即可。这是非常基础的技能,这里就不详细说明了。

开始正式操作

鼠标放到左侧导航中的“Snippets”上,点击弹出的“All Snippets”选项,如下图所示

如下图所示条目,就是用来实现各种功能的代码片段,可以看到,我们已经有“立即购买”这个代码片段了。你们还没有操作过,但是也有可能有很多其它代码片段,只要下图的开关按钮没有开启,它就不会生效,可以不用管它。如下图所示,我的两个代码片段都是开启了的,左边的按钮都是开启状态。

点击左上角的“Add New”,即可进入添加新代码片段界面,如下图:

如上图所示,分别填写标题,代码内容后,就可以点击提交按钮保存了。标题可以自定义,你想写什么就写什么。代码内容不能 随便写。如果你懂编程,你自己写代码即可。如果不懂编程,直接复制下面的代码进去,然后提交即可。

代码内容:

/**
 * 添加“马上购买”按钮 - 直接跳转结账
 * 支持简单产品和可变产品,双按钮等宽对齐,间距强制生效
 */
add_action( 'woocommerce_after_add_to_cart_button', 'add_buy_now_button_direct' );
function add_buy_now_button_direct() {
    global $product;
    
    $product_id = $product->get_id();
    $is_variable = $product->is_type( 'variable' );
    
    $button_class = 'single_add_to_cart_button button alt buy-now-button';
    $disabled = $is_variable ? ' disabled' : '';
    
    echo '<button type="button" id="buy-now-direct" class="' . esc_attr( $button_class ) . '"' . $disabled . '>' . esc_html__( 'Buy now', 'woocommerce' ) . '</button>';
    
    ?>
    <script type="text/javascript">
    jQuery( function( $ ) {
        var $btn = $( '#buy-now-direct' );
        var $form = $( 'form.cart' );
        var isVariable = <?php echo $is_variable ? 'true' : 'false'; ?>;
        var productId = <?php echo (int) $product_id; ?>;
        
        function getVariationId() {
            var variationId = 0;
            if ( isVariable ) {
                var $variationIdInput = $form.find( 'input[name="variation_id"]' );
                if ( $variationIdInput.length ) {
                    variationId = $variationIdInput.val();
                }
            }
            return variationId;
        }
        
        function getQuantity() {
            var qty = $form.find( 'input[name="quantity"]' ).val();
            return qty ? parseInt( qty ) : 1;
        }
        
        function getAttributes() {
            var attrs = {};
            if ( ! isVariable ) return attrs;
            $form.find( 'select' ).each( function() {
                var name = $( this ).attr( 'name' );
                if ( name && name.indexOf( 'attribute_' ) === 0 ) {
                    attrs[ name ] = $( this ).val();
                }
            } );
            return attrs;
        }
        
        function buildCheckoutUrl() {
            var checkoutUrl = '<?php echo esc_url( wc_get_checkout_url() ); ?>';
            var quantity = getQuantity();
            var finalProductId = productId;
            
            if ( isVariable ) {
                var variationId = getVariationId();
                if ( ! variationId ) {
                    return '';
                }
                finalProductId = variationId;
            }
            
            var url = checkoutUrl + '?add-to-cart=' + finalProductId + '&quantity=' + quantity;
            var attrs = getAttributes();
            for ( var key in attrs ) {
                if ( attrs[ key ] ) {
                    url += '&' + encodeURIComponent( key ) + '=' + encodeURIComponent( attrs[ key ] );
                }
            }
            return url;
        }
        
        $btn.on( 'click', function( e ) {
            e.preventDefault();
            if ( isVariable && $btn.prop( 'disabled' ) ) {
                return;
            }
            var url = buildCheckoutUrl();
            if ( url ) {
                window.location.href = url;
            } else {
                alert( '请先选择完整的产品选项' );
            }
        } );
        
        if ( isVariable ) {
            $form.on( 'found_variation', function( event, variation ) {
                $btn.prop( 'disabled', false );
            } ).on( 'hide_variation', function() {
                $btn.prop( 'disabled', true );
            } );
        }
    } );
    </script>
    <style>
    /* ========== 方案:直接控制按钮间距,不依赖父容器 ========== */
    /* 1. 让两个按钮在同一行(如果主题强制换行,则覆盖) */
    form.cart .single_add_to_cart_button,
    .variations_form .single_add_to_cart_button {
        display: inline-block !important;
        float: none !important;
        vertical-align: middle;
    }
    .buy-now-button {
        display: inline-block !important;
        float: none !important;
        vertical-align: middle;
    }
    
    /* 2. 关键:给“马上购买”按钮添加左边距(间距可调) */
    .buy-now-button {
        margin-left: 5px !important;   /* 可修改数值:15px, 20px, 30px */
    }
    
    /* 3. 两个按钮等宽(可选,保持视觉一致) */
    form.cart .single_add_to_cart_button,
    .variations_form .single_add_to_cart_button,
    .buy-now-button {
        text-align: center;
        box-sizing: border-box;
    }
    
    /* 4. 移动端:按钮占满宽度,取消左边距,改为上边距 */
    @media (max-width: 768px) {
        .single_add_to_cart_button,
        .buy-now-button {
            display: block !important;
            width: 100% !important;
            margin: 0 0 10px 0 !important;
        }
        .buy-now-button {
            margin-left: 0 !important;
            margin-top: 0 !important;
        }
    }
    </style>
    <?php
}

OK,教程就完成了。祝大家好运,祝大家大卖!

发表评论

要发表评论,您必须先登录
购物车
滚动至顶部