Woocommerce - 产品页面上的添加到购物车和立即购买按钮

时间:2014-11-18 00:13:15

标签: php wordpress woocommerce

我正在尝试在产品页面的Woocommerce中添加“立即购买”按钮,因此有两个按钮:

  1. 添加到购物车
  2. 立即购买(将产品添加到购物车并重定向到结帐)
  3. 我仍然希望像往常一样添加到购物车。

    我怎样才能做到这一点?非常感谢。

    http://wordpress.org/extend/plugins/woocommerce/

2 个答案:

答案 0 :(得分:4)

我设法通过查找此博文http://samplacette.com/skip-shopping-cart-in-woocommerce/来解决此问题。

如果有其他人发现他们正在努力实现这一点,我就是这样做的(可能不是最好的解决方案,但它对我有用):

我将以下文字复制到我的主题functions.php

/** * Set cart item quantity action *
* Only works for simple products (with integer IDs, no colors etc) *
* @access public
* @return void */
function woocommerce_set_cart_qty_action() { 
    global $woocommerce;
    foreach ($_REQUEST as $key => $quantity) {
    // only allow integer quantities
    if (! is_numeric($quantity)) continue;

        // attempt to extract product ID from query string key
        $update_directive_bits = preg_split('/^set-cart-qty_/', $key);
        if (count($update_directive_bits) >= 2 and is_numeric($update_directive_bits[1])) {
            $product_id = (int) $update_directive_bits[1]; 
            $cart_id = $woocommerce->cart->generate_cart_id($product_id);
            // See if this product and its options is already in the cart
            $cart_item_key = $woocommerce->cart->find_product_in_cart( $cart_id ); 
            // If cart_item_key is set, the item is already in the cart
            if ( $cart_item_key ) {
                $woocommerce->cart->set_quantity($cart_item_key, $quantity);
            } else {
                // Add the product to the cart 
                $woocommerce->cart->add_to_cart($product_id, $quantity);
            }
        }
    }
}

add_action( 'init', 'woocommerce_set_cart_qty_action' );

然后我修改了主题 /woocommerce/single-product/add-to-cart/simple.php(确保你没有对插件文件进行调整,因此请复制并粘贴将您的主题文件转换为woocommerce文件夹中的以下内容(注意我已从代码中删除了我的数量输入,因此如果您需要它,请确保您重新编写代码以使其正常工作):

<form class="cart single-product" method="post" enctype='multipart/form-data'>
    <?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
    <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $product->id ); ?>" />
    <button type="submit" class="single_add_to_cart_button button alt cart-buttton add-to-cart"><?php echo $product->single_add_to_cart_text(); ?></button>
    <?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
</form>

<form class="cart single-product" method="post" enctype='multipart/form-data' action="/checkout?set-cart-qty_<?php echo $product->id;?>=1">
    <button type="submit"  class="single_add_to_cart_button button alt cart-buttton buy-now">Buy Now</button>
    <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $product->id ); ?>" />
</form>

我在现有的“添加到购物车”按钮旁边添加了另一个按钮,但是将表单分开。博客文章提到你可以添加一个超链接,但上面的工作对我来说,我需要自定义页面的方式(略长一点啰嗦)

来自博客:

  

使用说明:

     

创建一个带有查询字符串参数的超链接,如下所示:   ?设置购物车,qty_ =   您的产品的数字ID在哪里(类似“167”),并且是您要在用户的购物车中设置的&gt;数量(很可能只是“1”)。

     

用于向用户发送结帐的示例网址,其中包含购物车中ID为“167”的一件商品:

     

http://my.website.com/checkout?set-cart-qty_167=1

我希望以上帮助那些遇到类似问题的人。

答案 1 :(得分:0)

经过多次搜索,我很惊讶这不是标准的东西。 这是我的解决方案:

使用像“woocommerce_single_product_summary”这样的钩子

或者将wp-content / plugins / woocommerce / templates / single-product / add-to-cart / simple.php复制到您的子主题中,如: 可湿性粉剂内容/主题/子主题/ woocommerce /单品/添加到购物车/ simple.php

编辑文件并将以下代码添加到要显示按钮的位置:

<div class="express-checkout-wrapper">
            <a id="dc_express_checkout" href="/checkout/?add-to-cart=<?php echo get_the_ID(); ?>">
                Purchase
            </a>
        </div>

现在唯一的问题是按钮会带你结帐并添加正确的产品,但是如果你更改了它没有正确的数量,那么我在我的custom.js文件中使用js在页脚中排队:

// Add and change quantity to express checkout button when the quantity is updated
if($('.cart .qty').length){
    var originalUrl = $('#dc_express_checkout').attr('href');
    $('.cart .qty').change(function(){
        var url = originalUrl + '&quantity=' + $(this).val();
        $('#dc_express_checkout').attr('href', url);
    });
}

您可以更改以下网址:

href="/checkout/?add-to-cart=<?php echo get_the_ID(); ?>"

为:

href="/cart/?add-to-cart=<?php echo get_the_ID(); ?>"

如果您希望按钮指向购物车而不是结帐页面。