dp926460 2017-09-20 17:30
浏览 80
已采纳

在WooCommerce中隐藏基于产品类型的付款方式

In WoCommerce, I would like to disable particular payment methods and show particular payment methods for a subscription products in WooCommerce (and vice versa).

This is the closest thing we've found but doesn't do what I am expecting.

Yes, there are plugins that will do this but we want to achieve this without using another plugin and without making our stylesheet any more nightmarish than it already is.

Any help on this please?

  • 写回答

2条回答 默认 最新

  • dow56114 2017-09-20 20:17
    关注

    Here is an example with a custom hooked function in woocommerce_available_payment_gateways filter hook, where I can disable payment gateways based on the cart items (product type):

    add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
    function conditional_payment_gateways( $available_gateways ) {
        // Not in backend (admin)
        if( is_admin() ) 
            return $available_gateways;
    
        foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            $prod_variable = $prod_simple = $prod_subscription = false;
            // Get the WC_Product object
            $product = wc_get_product($cart_item['product_id']);
            // Get the product types in cart (example)
            if($product->is_type('simple')) $prod_simple = true;
            if($product->is_type('variable')) $prod_variable = true;
            if($product->is_type('subscription')) $prod_subscription = true;
        }
        // Remove Cash on delivery (cod) payment gateway for simple products
        if($prod_simple)
            unset($available_gateways['cod']); // unset 'cod'
        // Remove Paypal (paypal) payment gateway for variable products
        if($prod_variable)
            unset($available_gateways['paypal']); // unset 'paypal'
        // Remove Bank wire (Bacs) payment gateway for subscription products
        if($prod_subscription)
            unset($available_gateways['bacs']); // unset 'bacs'
    
        return $available_gateways;
    }
    

    Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

    All code is tested on Woocommerce 3+ and works.

    This is just an example to show you how things can work. You will have to adapt it

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!