You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

定制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:55:54