Woocommerce 添加到购物车按钮重定向到结账

问题描述 投票:0回答:9

我使用插件 woocommerce 创建了一个电子商务。我只出售订阅,因此“/cart/”页面毫无用处。我正在尝试摆脱它,以便当我的客户单击“添加到购物车”按钮时,他最终会出现在结帐页面上。

php wordpress woocommerce
9个回答
78
投票

在 WooCommerce 3.6 或更高版本中,您可以使用

woocommerce_add_to_cart_redirect
(props @roman)

add_filter ('woocommerce_add_to_cart_redirect', function( $url, $adding_to_cart ) {
    return wc_get_checkout_url();
}, 10, 2 ); 

原答案:

您可以在functions.php中使用过滤器:

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;
}

它似乎不适用于ajax,但它可以在单个产品页面上运行,我认为这就是您使用的

在 WooCommerce (>= 2.1) 上,该功能可以简化为:

function redirect_to_checkout() {
    return WC()->cart->get_checkout_url();
}

15
投票

我找到了一个简单的解决方案,效果就像魔术一样。

  1. 如@Ewout所述,选中“成功添加后重定向到购物车页面”复选框。
  2. Woocommerce > 设置 > 结帐(选项卡)- 您应在其中选择购物车和结帐页面,选择结帐页面作为购物车页面(附图)。

就是这样。对我有用。 enter image description here


14
投票

WooCommerce 设置中有一个选项允许您启用此功能:

Option to redirect visitor to cart page

只需登录您的 WP 管理面板 > WooCommerce > 目录并选择该选项。我希望这有帮助!


6
投票

WooCommerce 3.5.1 更新

步骤1。 首先转到 WooCommerce 产品设置并停用 AJAX 添加到购物车。

步骤 2。 使用

woocommerce_add_to_cart_redirect
钩子重定向到结账。

add_filter( 'woocommerce_add_to_cart_redirect', function( $url ) {
    return wc_get_checkout_url();
});

当然,还需要做一些小事情,例如更改“添加到购物车”按钮文本和删除一些与 WooCommerce 购物车相关的通知。


3
投票

@RemiCorson 发布了这个简短但有益的教程:

http://www.remicorson.com/woocommerce-skip-product-cart-pages/

他提到了与上面@Ewout相同的过滤器,

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;

}

但是有一行代码很突出,对于我当前的 woocommerce 项目来说非常有价值:

用户可以使用一个直接链接来自动绕过产品页面。 http://your-site.com/?add-to-cart=37

“37”将替换为您的产品 ID。

这对我来说很有用,可以消除不必要的步骤并引导用户直接从主页和其他非 woocommerce 页面/帖子结帐。


1
投票

Filter add_to_cart_redirect 在 WooCommerce 2.6 中已弃用。请改用 woocommerce_add_to_cart_redirect

将其添加到您的functions.php中:

add_filter ('woocommerce_add_to_cart_redirect', function() {
  return WC()->cart->get_checkout_url();
} );

1
投票

在主题 function.php 文件中尝试以下代码

add_filter( 'woocommerce_add_to_cart_redirect', 'woo_skip_cart_redirect_checkout' );
 
function woo_skip_cart_redirect_checkout( $url ) {
    return wc_get_checkout_url();
}

0
投票

在商店页面上,如果您想同时使用ajax和重定向。第二种方法仅当有某些条件时,您可以使用此过滤器并保留 Woocommerce 设置 ajax 启用:

add_filter('woocommerce_loop_add_to_cart_link', array( $this, 'add_quantity_input' ), 4, 2); 

删除类属性

ajax_add_to_cart
并将 href 值更改为结帐 url 页面;

在我的模板案例上:

public function add_quantity_input($text = null, $product = null) {
    global $product, $woocommerce;

    if ( $text != null and $product != null  ) {
        if(ismycondition($product->id)) {
            $s = explode('class="', $text);
            $s[2]=str_replace('ajax_add_to_cart', '', $s[2]);
            $text = implode('class="', $s);

            $text = preg_replace('/<a(.*)href="([^"]*)"(.*)>/','<a$1href="'.$woocommerce->cart->get_checkout_url().'"$3>', $text);
        }
    }

    return $text;
}

我希望这有帮助。


0
投票

没有一个解决方案真正适合我,过滤器 add_to_cart_redirect 在每个页面上触发,而不仅仅是在购物车上。我对建议的答案做了一些修改。

add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
  function redirect_to_checkout() {
  if(is_cart()){
    $checkout_url = WC()->cart->get_checkout_url();
  ?>
  <script>
  location = '<?=$checkout_url?>';
  </script>
  <?php 
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.