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

当购物车总额低于指定金额时隐藏WooCommerce BACS支付方式的问题排查

解决WooCommerce订单金额低于500美元时隐藏银行转账支付方式的问题

你的代码存在几个关键问题,导致无法正常运行,以下是问题排查和修正方案:

问题点分析

  • 钩子优先级错误:woocommerce_available_payment_gateways钩子设置优先级为1会让你的代码过早执行,后续其他插件或主题的支付网关逻辑很可能会覆盖你的修改,建议使用更高的优先级(比如99)。
  • 订单金额获取方式错误:WC()->cart->get_total('edit')返回的是带货币符号的格式化字符串(例如$499.00),直接和数字500做比较会触发类型错误,无法得到正确的判断结果。
  • 多余的输出语句:函数里的echo会破坏结账页面的HTML结构,导致页面渲染异常,必须删除。

修正后的代码

add_filter( 'woocommerce_available_payment_gateways', 'show_hide_payment_methods_on_checkout', 99 );

function show_hide_payment_methods_on_checkout( $available_gateways ) {
    // 仅在结账页面执行逻辑,避免其他页面无效调用
    if ( ! is_checkout() || is_wc_endpoint_url() ) {
        return $available_gateways;
    }

    $minimum_order_total = 500;
    // 获取纯数值的订单总额,确保比较逻辑正确
    $order_total = WC()->cart->get_total('raw');

    // 订单金额低于或等于500美元时,移除银行转账(bacs)支付方式
    if ( $order_total <= $minimum_order_total && isset( $available_gateways['bacs'] ) ) {
        unset( $available_gateways['bacs'] );
    }

    return $available_gateways;
}

修正说明

  1. 调整钩子优先级为99,确保你的逻辑在其他支付网关相关代码之后执行,避免被覆盖。
  2. 使用get_total('raw')获取不带任何格式的纯数字金额,保证数值比较的准确性。
  3. 添加结账页面判断,限制函数仅在结账流程中运行,减少不必要的资源消耗。
  4. 合并条件判断,让代码结构更简洁高效。

内容的提问来源于stack exchange,提问作者Tomas Canale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:09:54