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

标签 php wordpress woocommerce payment-gateway product

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

This是我们发现的最接近的东西,但没有达到我的预期。

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

请问有什么帮助吗?

最佳答案

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

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

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

关于php - 在 WooCommerce 中隐藏基于产品类型的付款方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328364/

相关文章:

php - 就像在 zend 框架 2 中的 where 查询

wordpress - Vagrant Up 失败,因为该名称已存在

css - 如何创建一个使用 BootStrap 的 WordPress 主题?

css - 我的 CSS 在桌面上看起来很完美,但在移动设备上向右留下了 2-5 像素的线,我如何找到问题所在?

php - 通过变体 ID 获取 WooCommerce 订单项目

javascript - 如何使用ajax/json刷新页面部分?

php - Codeigniter:选择中的前缀字符串到指定的所有列

php - 设置 laravel .env 的位置

php - 在 Woocommerce 结帐中将 "Local Pickup"文本更改为其他内容

php - WooCommerce Flatsome 主题改变产品图像大小