如何使商品直接链接到结账并将其添加到购物车?

时间:2017-07-17 09:30:09

标签: php wordpress woocommerce

我几天来一直在处理这个问题,我找不到这个问题的答案。我被要求制作一个woocommerce页面,以便购买一个特定的包。我们的想法是,一旦您选择其中一个“套餐”,就可以直接进入结账处并将其添加到购物车中。

这就是我设法做的事情:

// Remove Title single linking

remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );

//Image adding to cart and linking to checkout

add_action( 'woocommerce_before_shop_loop_item', 'woocommerce_image_add_direct_checkout_link_open', 10);
add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_image_add_direct_checkout_link_close', 10);

function woocommerce_image_add_direct_checkout_link_open(){
    $product = wc_get_product(get_the_ID());
    global $woocommerce;
    $checkout_url = $woocommerce->cart->get_checkout_url();
    $shop_url = get_permalink( wc_get_page_id( 'shop' ) );
    $product_id = $product->get_ID();
    if( $product ) {
        echo '<a href="' . $checkout_url . '" class="woocommerce-LoopProductImage-link">
        <a rel="nofollow" href="' . $shop_url . '?add-to-cart=' . $product_id . '">';
    }
}

function woocommerce_image_add_direct_checkout_link_close(){
    $product = wc_get_product(get_the_ID());
    if( $product )
        echo '</a>
        </a>';
}

我遇到的问题是,当我尝试打印两个时,其中一个被自动关闭而不是一个接一个地获得一个链接我得到2个链接,只有一个工作(它可以是结账或者添加到购物车,它将取决于我放在哪一个。)

网上印刷的当前html是这样的:

<li>
    <a href="xxx/checkout">
    </a>
    <a rel="nofollow" href="xxx/shop/?add-to-cart=#ID>
        //Code
    </a>
    //add to cart button
</li>

我喜欢打印的内容是这样的:

<li>
    <a href="xxx/checkout">
        <a rel="nofollow" href="xxx/shop/?add-to-cart=#ID>
            //Code
        </a>
        //add to cart button
    </a>
</li>

非常感谢任何类型的帮助。

编辑: 这就是代码之前的情况:

<ul>
    <li>
        <a href="xxx/single_product">
            <img>
            <h2>
        </a>
        //add to cart button
    </li>
    //List of products loop
</ul>

1 个答案:

答案 0 :(得分:0)

好的,我找到了一个解决方案,返回我的第一个代码来解决这个问题。但是,让两个人打开它可能是不可能的,它可能是一个安全协议。然后唯一的事情是将2个链接强制为一个,我不想将它用作javascript,所以我想起了另一个重定向的钩子&#39; add-to-cart&#39;链接。考虑到这一点,我找到了我需要的答案。制作我自己的循环的代码就是这个:

//Change product's loop design

remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );

add_action( 'woocommerce_before_shop_loop_item', 'another_kind_of_loop' );

function another_kind_of_loop(){
    $product = wc_get_product(get_the_ID());
    $shop_url = get_permalink( wc_get_page_id( 'shop' ) );
    $product_id = $product->get_ID();
    $product_sku = $product->get_SKU();
    $img = $product->get_image('fullsize');
    $title = $product->get_title();
    if($product){
        ?>
            <a rel="nofollow" href="<?php echo $shop_url . '?add-to-cart=' . $product_id; ?>" data-quantity="1" data-product_id="<?php echo $product_id; ?>" data-product_sku="<?php echo $product_sku; ?>" >
                <?php echo $img; ?>
                <h2 class="product-loop_title">
                    <?php echo $title; ?>
                </h2>
            </a>
        <?php
    }
}

正如您所看到的,我重新创建了“添加到购物车”。如果有一天我将需要使用其他插件,请链接所有信息。但是,您还需要添加此代码:

// Redirect 'Add to cart' to 'Checkout'

add_filter ('add_to_cart_redirect', 'redirect_to_checkout');

function redirect_to_checkout() {
    global $woocommerce;
    $checkout_url = $woocommerce->cart->get_checkout_url();
    return $checkout_url;
}

此功能将向结帐添加重定向。而且我坚持使用“添加”这个词,因为无论如何它都会执行添加到购物车的链接,所以这至少会解决这个问题。