自定义WooCommerce支付网关插件激活后原有支付插件消失求助
解决WooCommerce支付网关插件覆盖原有网关的问题
兄弟,我之前开发支付网关插件时也踩过这个坑!你遇到的问题几乎可以肯定是注册支付网关时错误覆盖了原有网关列表,而不是追加进去。下面给你一步步排查和解决的思路:
首先检查
woocommerce_payment_gateways过滤器的实现
这个过滤器是WooCommerce用来扩展支付网关的核心钩子,很多新手容易犯的错就是直接返回只包含自己网关的数组,把原有的网关全踢走了。
错误示例:add_filter( 'woocommerce_payment_gateways', 'jc_add_payment_gateway' ); function jc_add_payment_gateway( $gateways ) { // 这里直接返回新数组,会覆盖所有原有网关 return array( 'WC_JC_Paygate' ); }正确写法应该是把你的网关类追加到原数组末尾:
add_filter( 'woocommerce_payment_gateways', 'jc_add_payment_gateway' ); function jc_add_payment_gateway( $gateways ) { // 把自己的网关添加到现有列表里 $gateways[] = 'WC_JC_Paygate'; return $gateways; }排查是否有冲突代码
检查你的插件代码里有没有类似remove_all_filters('woocommerce_payment_gateways')的语句,这种代码会清空所有其他插件注册的网关钩子。另外,也要确认网关类的构造函数里没有修改全局支付网关配置的错误逻辑。测试插件冲突
先暂时禁用其他所有支付插件,只激活你的JC Paygate和WooCommerce自带的COD(货到付款)网关,刷新支付设置页面看是否能同时显示两个。如果正常,再逐个开启其他支付插件,找到可能和你代码冲突的那个,针对性排查。检查网关类的规范性
确保你的网关类正确继承了WC_Payment_Gateway父类,并且类文件加载正常。如果类加载失败,有时候也会导致异常显示,你可以打开PHP错误日志看看有没有相关报错。
按照这个思路调整代码后,你的插件应该就能作为第5个支付网关正常显示在列表里了!
内容的提问来源于stack exchange,提问作者JTech
相关产品推荐
相关产品推荐

