返回

如何在 WooCommerce 购物车禁用指定商品的支付网关?

php

如何在 WooCommerce 购物车中禁用特定商品的支付网关

问题陈述

是否正在为在 WooCommerce 购物车中禁用特定商品的支付网关而苦苦挣扎?别担心,本指南将详细介绍如何解决此问题。

解决方案

通过利用 woocommerce_available_payment_gateways 过滤器,可以轻松地从购物车中删除特定支付网关。以下步骤将引导您完成此过程:

步骤 1:检查购物车内容

确认购物车中是否存在目标产品。

步骤 2:获取产品 ID

获取要禁用支付网关的产品 ID。

步骤 3:移除支付网关

使用 unset() 函数从可用支付网关中移除目标网关。

步骤 4:返回可用支付网关

最后,返回修改后的可用支付网关列表。

代码示例

将这些步骤组合在一起,得到以下代码示例:

add_filter( 'woocommerce_available_payment_gateways', 'wp_unset_gateway_by_id', 10, 2 );
function wp_unset_gateway_by_id( $available_gateways, $products ) {
  if ( is_checkout() && WC()->cart && WC()->cart->is_empty() ) {
    return $available_gateways;
  }
  $product_ids = array(6197);
  foreach ( $products as $product ) {
    if ( in_array( $product->get_id(), $product_ids ) || ( $product->is_type('variation') && in_array( $product->get_parent_id(), $product_ids ) ) ){
      unset( $available_gateways['bacs'] );
    }
  }
  return $available_gateways;
}

常见问题解答

  • 我如何禁用特定产品的 Stripe 支付网关?

使用 unset($available_gateways['stripe']) 替换示例代码中的 unset($available_gateways['bacs'])

  • 我可以禁用整个类别的支付网关吗?

是的,你可以使用 woocommerce_product_cat_has_payment_gateway 钩子。

  • 如果要禁用所有产品的特定支付网关怎么办?

使用 unset($available_gateways['gateway_id']),其中 gateway_id 是要禁用的网关的 ID。

  • 是否可以在结账页面动态禁用支付网关?

是的,你可以使用 woocommerce_get_available_payment_gateways() 函数。

  • 如何在不使用代码的情况下禁用支付网关?

可以考虑使用插件,例如 WooCommerce Payment Gateways Control。

结论

通过遵循本指南,你将能够轻松地禁用 WooCommerce 购物车中特定商品的支付网关。灵活运用 woocommerce_available_payment_gateways 过滤器,你可以根据需要自定义可用支付网关。