【问题标题】:Woocommerce add to cart button redirect to checkoutWoocommerce 添加到购物车按钮重定向到结帐
【发布时间】:2013-03-13 15:00:36
【问题描述】:

我使用插件 woocommerce 创建了一个电子商务。我只出售订阅,所以“/cart/”页面没用。我试图摆脱它,以便当我的客户点击“添加到购物车”按钮时,他最终会进入结帐页面。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    在 WooCommerce 3.6 或更高版本中,您可以使用woocommerce_add_to_cart_redirect(道具@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();
    }
    

    【讨论】:

    • 你是我正式的新朋友。 TYVM
    • 大家好,我如何为特定产品类别添加该功能?
    • @RoeeYossef 一种方法是更改​​添加到购物车的链接,添加如下内容: add_query_arg( array( 'direct-checkout-redirect' => 1 ), $_product->add_to_cart_url() );然后进入函数redirect_to_checkout(),检查“direct-checkout-redirect”参数。
    • 警告 - 如果您在 Settings->Product->Display 中关闭 Ajax,第二个示例仍会在结帐行中停止。然而,第一个示例甚至在直接链接中也能正常运行。= ( ?add-to-cart=[PRODUCT-ID]&variation_id=[VARIATION-ID]&attribute_[ATTRIBUTE-NAME]=[ATTRIBUTE-SLUG]&attribute_[ATTRIBUTE- NAME]=[ATTRIBUTE-SLUG])
    • “add_to_cart_redirect”钩子使用过时的数据结构,自 WooCommerce 3.1.1 版起已弃用!请改用 woocommerce_add_to_cart_redirect。
    【解决方案2】:

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

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

    【讨论】:

    • 几秒钟后,您似乎想跳过购物车页面并重定向到结帐...
    • 没错,我现在正在使用这个选项。但就像你刚才说的,我想直接去结账。
    • @DevinWalker 如果您只需要在少数情况下重定向并在其他情况下继续使用 ajax 怎么办?
    【解决方案3】:

    我找到了一个像魔术一样工作的简单解决方案。

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

    就是这样。为我工作。

    【讨论】:

    • 谢谢,我认为这是 woocomerce 的新功能,因为当我问这个问题时,该选项不存在。我尚未对其进行测试,但为更新 +1。
    • 不要这样做 - 当 Woocommerce 检测到有人使用空购物车访问结帐页面时,它会尝试将他们重定向到购物车页面。因为它们是一回事,所以最终会陷入无休止的重定向循环。
    • 我有最新版本,他们已经移动了所有这些功能。在 ui 中的任何地方都找不到重定向 :(
    • 我不明白刘易斯的意思。我已按照上面的说明进行操作。然后,我访问了 mydomain.com/checkout/,我看到了一个空的结帐页面。
    【解决方案4】:

    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 购物车相关的通知。我建议查看本教程以获取更多信息https://rudrastyh.com/woocommerce/redirect-to-checkout-skip-cart.html

    【讨论】:

      【解决方案5】:

      @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 页面/帖子结帐。

      【讨论】:

      • add_to_cart_redirect 现在已弃用,请改用woocommerce_add_to_cart_redirect。
      • get_checkout_url() 从 2.5.0 开始被弃用,取而代之的是 wc_get_checkout_url()
      【解决方案6】:

      过滤器 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();
      } );
      

      【讨论】:

      • HI @Christian Lescuyer 这个功能工作正常,但是我想知道如何在“添加到购物车”旁边添加一个额外的“结帐”按钮并将其分配在该按钮上,但不是全局分配整个网站的所有“添加到购物车”按钮......有什么想法吗?
      • @gil-hamer 您将不得不修改主题。在您想要的页面上找到“添加到购物车”按钮,然后添加您自己的按钮。这不是那么简单,因为您不能修改主题(您的修改将在下次升级时被覆盖)。通常的方法是添加一个子主题。如果你已经有了,没问题!
      • 感谢@Christian Lescuyer
      【解决方案7】:

      在商店页面上,如果您想使用 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;
      }
      

      希望对你有所帮助。

      【讨论】:

        【解决方案8】:

        实际上没有一个解决方案对我有用,过滤器 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 
          }
        }
        

        【讨论】:

          【解决方案9】:

          在主题 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();
          }
          

          【讨论】:

            猜你喜欢
            • 2014-08-30
            • 2020-04-04
            • 1970-01-01
            • 1970-01-01
            • 2014-06-01
            • 1970-01-01
            • 2020-12-05
            • 1970-01-01
            • 2014-09-10
            相关资源
            最近更新 更多