【问题标题】:Skip WooCommerce cart for specific subscription products跳过特定订阅产品的 WooCommerce 购物车
【发布时间】:2021-01-10 00:51:18
【问题描述】:

我希望让多个特定订阅产品跳过购物车并直接结帐。我在这里找到了以下代码(仅适用于一种产品),它使用产品 ID 为一种产品跳过它,但无法适应多种产品。还尝试了各种其他方法,但似乎都不适用于 Woocommerce 4.51

How to skip cart page on woocomerce for certain products only?

add_filter( 'woocommerce_add_to_cart_redirect', 'woo_redirect_checkout' );

function woo_redirect_checkout() {

   global $woocommerce;

   $desire_product = '73458';

   //Get product ID

   $product_id = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_POST['add-to-cart'] );

   //Check if current product is subscription

   if ( $product_id == $desire_product ){

       $checkout_url = $woocommerce->cart->get_checkout_url();

       return $checkout_url;

       exit;

   } else {

       $cart_url = $woocommerce->cart->get_cart_url();

       return $cart_url;

       exit;

   }

}

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    woocommerce_add_to_cart_redirect 过滤器使您可以访问已添加到购物车的产品的产品对象。因此您可以检查订阅产品类型:

    add_filter( 'woocommerce_add_to_cart_redirect', 'woo_redirect_checkout', 10, 2 );
    function woo_redirect_checkout( $url, $product ) {
        return $product->get_type() == 'subscription' ? wc_get_checkout_url() : $url;
    }
    

    现在所有subscription 类型的产品都会被重定向到结帐而不是购物车。

    如果您不希望所有订阅产品都重定向到结帐,而只希望订阅某些类别,您可以先从产品对象中检索产品类别,看看它们是否与$checkout_cats 中定义的类别之一匹配数组:

    add_filter( 'woocommerce_add_to_cart_redirect', 'woo_redirect_checkout', 10, 2 );
    function woo_redirect_checkout( $url, $product ) {
    
        //Define your categories here
        $checkout_cats = array( 'Music', 'Posters' );
    
        if ( $product->get_type() == 'subscription' ) {
            $terms = get_the_terms( $product->get_id(), 'product_cat' );
            if ( !empty( $terms ) ) {
                foreach ( $terms as $term ) {
                    if ( in_array( $term->name, $checkout_cats ) ) return wc_get_checkout_url();
                }
            }
        }
    
        return $url;
    }
    

    【讨论】:

    • 好的,谢谢,如果我只想为多个特定的订阅产品而不是全部产品做这件事,我该怎么做?可以根据类别或单个产品 ID/slug 定义它们
    • 如果此答案对您有用,请将其标记为已接受,并可能投票。
    • 我想要,但它不起作用:'未捕获的错误:在 wp-content/themes/oceanwp-child/functions.php:331 中调用 null 上的成员函数 get_type()'
    • 这意味着$product 变量不包含产品对象。您是如何将产品添加到购物车的?它是实际产品吗?
    • 肯定是一个产品,刚刚看了WC文档,上面写着:订阅产品是一种自定义产品类型,可以在创建新产品时选择。在 WooCommerce 订阅代码库中引用订阅产品时,$product 或 $product_id 将用作变量名。
    猜你喜欢
    • 2020-11-15
    • 2017-12-10
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2021-08-02
    • 2017-12-03
    • 2020-04-28
    • 2021-11-27
    相关资源
    最近更新 更多