定制WooCommerce产品支付网关:针对ID3197禁用指定支付方式
解决方案:针对特定产品ID禁用指定支付网关
直接在现有代码中扩展逻辑即可,无需新增额外函数。修改后的完整代码如下:
add_filter( 'woocommerce_available_payment_gateways', 'rudr_payment_methods_by_product_ids' ); function rudr_payment_methods_by_product_ids( $gateways ){ // 后台页面不执行任何操作 if( is_admin() ) { return $gateways; } // 需要禁用Stripe的产品ID数组 $stripe_disable_ids = array( 2422, 2423, 2424, 2425 ); // 需要禁用银行转账和COD的产品ID $other_disable_id = 3197; // "支付订单"页面不执行任何操作 if( is_wc_endpoint_url( 'order-pay' ) ) { return $gateways; } foreach ( WC()->cart->get_cart_contents() as $key => $cart_item ) { $product_id = $cart_item[ 'data' ]->get_id(); // 检查是否是需要禁用Stripe的产品 if( in_array( $product_id, $stripe_disable_ids ) && isset( $gateways[ 'stripe' ] ) ) { unset( $gateways[ 'stripe' ] ); } // 检查是否是需要禁用银行转账和COD的产品 if( $product_id === $other_disable_id ) { // 移除银行转账网关(slug为backs) if( isset( $gateways[ 'backs' ] ) ) { unset( $gateways[ 'backs' ] ); } // 移除COD货到付款网关(slug为cod) if( isset( $gateways[ 'cod' ] ) ) { unset( $gateways[ 'cod' ] ); } } } return $gateways; }
关键修改说明:
- 拆分产品ID分组,把需要禁用Stripe的产品和需要禁用其他网关的产品分开管理,逻辑更清晰
- 新增针对产品ID3197的判断,同时移除指定的
backs(银行转账)和cod(货到付款)网关 - 保留原有代码中的后台判断、支付订单页面判断,以及购物车遍历逻辑
- 注意:如果银行转账网关的实际slug不是
backs,请替换为你站点中对应的网关slug(比如WooCommerce默认银行转账的slug是bacs,需根据实际情况调整)
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

