在 WooCommerce 中隐藏基于产品类型的付款方式 [英] Hide payment method based on product type in WooCommerce

查看:82
本文介绍了在 WooCommerce 中隐藏基于产品类型的付款方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 WoCommerce 中,我想禁用特定付款方式并显示 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.

有什么帮助吗?

推荐答案

这是一个在 woocommerce_available_payment_gateways 过滤器钩子中使用自定义钩子函数的示例,我可以在其中禁用支付基于购物车项目(产品类型)的网关:

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

代码位于活动子主题(或主题)的 function.php 文件或任何插件文件中.

所有代码都在 Woocommerce 3+ 上进行了测试并且可以正常工作.

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

这篇关于在 WooCommerce 中隐藏基于产品类型的付款方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆