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

问题描述 投票:4回答:2

在WooCommerce中,我想禁用特定的付款方式,并在WooCommerce中显示订阅产品的特定付款方式(反之亦然)。

This是我们发现的最接近的东西,但没有做我期待的事情。

是的,有插件可以做到这一点但我们希望在不使用其他插件的情况下实现这一点,并且不会使我们的样式表比现在更加噩梦。

对此有何帮助?

php wordpress woocommerce payment-gateway product
2个回答
9
投票

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

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+上进行测试并且有效。

这只是向您展示事物如何运作的一个例子。你必须适应它


0
投票

这段代码对我来说非常有用,但是我必须修复它的错误:行

 $prod_variable = $prod_simple = $prod_subscription = false;

必须放在FORSACH的OUTSIDE(之前),否则每次执行新项目时它都会重置标志。我的情况是,每当订购产品在购物车上时,我都需要取消设置特定的付款方式。实际上,只有只有一个订阅产品时,此代码才有效。如果我在购物车上放置了另一个不同的商品,则该标志将再次变为false,并且将加载付款方式。将该行置于FOREACH之外将解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.