如何获取和修改WooCommerce支付网关

在本文中,我想与您分享一些有用的函数,这些函数可用于WooCommerce商店中的支付网关

您可以在“结帐”选项卡下的WooCommerce>“设置”中找到所有已安装的支付网关。
在屏幕截图上,您可以看到Stripe,PayPal,PayPal网站付款专业版等。

您可以在 woocommerce/includes/class-wc-payment-gateways.php 文件中找到以下所有函数和挂钩。

获取支付网关

在这里,我将向您展示如何使用两个类方法WC()->payment_gateways->payment_gateways()WC()->payment_gateways->payment_gateways()

所有已安装的支付方式

默认情况下,WooCommerce已安装4个付款网关:BACS,支票付款,货到付款和PayPal。可以使用插件安装其他付款方式。通常,如果激活了插件-已安装网关,则可以在商店设置中找到它。

$installed_payment_methods = WC()->payment_gateways->payment_gateways();

此类的方法返回WooCommerce商店上已安装的所有支付网关的对象。内部数据是什么?使用print_r()打印结果,您就会知道。

$installed_payment_methods = WC()->payment_gateways->payment_gateways();
print_r( $installed_payment_methods );

在下面的示例中,让我们尝试打印支付网关的名称:

$installed_payment_methods = WC()->payment_gateways->payment_gateways();
 
foreach( $installed_payment_methods as $method ) {
	echo $method->title . '<br />';
}

此方法还具有过滤器woocommerce_payment_gateways,使您可以完全删除任何WooCommerce默认支付网关。请阅读以下内容。

仅可用网关

WooCommerce直接在结帐页面上以及在处理付款时获取付款方式时会使用此方法。因此,如果在商店设置中未启用特定的付款方式,则不会显示该付款方式。

$available_payment_methods = WC()->payment_gateways->get_available_payment_gateways();

返回结果类似于WC()->payment_gateways->payment_gateways()。它还具有一个过滤器woocommerce_available_payment_gateways,如下所述。

删除WooCommerce默认支付网关

如果我们要删除WooCommerce的一些默认支付网关,比如 BACS、Check Payments、货到付款 和 PayPal,可以参考下面的代码:

function misha_remove_default_gateway( $load_gateways ){
 
	unset( $load_gateways[0] ); // WC_Gateway_BACS
	unset( $load_gateways[1] ); // WC_Gateway_Cheque
	unset( $load_gateways[2] ); // WC_Gateway_COD (Cash on Delivery)
	//unset( $load_gateways[3] ); // WC_Gateway_Paypal
 
	return $load_gateways;
}
 
add_filter( 'woocommerce_payment_gateways', 'misha_remove_default_gateway', 10, 1 );

将代码插入当前主题的functions.php,然后转到商店结帐设置。

结果,您将看到仅保留PayPal网关

无可用网关时强制使用特定支付网关

什么时候需要这个?

让我从生活中描述情况。我的客户有一个基于订阅的网站,安装了 WooCommerce Memberships 和WooCommerce Subscriptions 插件。作为支付网关,我们使用了Stripe。但是发生了Stripe停止与他的公司合作的情况。之后,我们停用Stripe插件,即使我们安装了其他支付网关,WooCommerce也不允许现有订阅者使用其他支付网关续订其订阅。这是不可接受的。

下面的一小段代码拯救了我们。

/*
 * 无可用网关时,强制使用 PayPal Payflow
 */
function misha_change_wc_gateway_if_empty( $allowed_gateways ){
 
	if( empty( $allowed_gateways ) ) {
		$allowed_gateways = array();
		$all_gateways = WC()->payment_gateways->payment_gateways();
		$allowed_gateways['paypal_pro_payflow'] = $all_gateways['paypal_pro_payflow'];
	}
 
	return $allowed_gateways;
 
}
add_filter('woocommerce_available_payment_gateways','misha_change_wc_gateway_if_empty', 9999, 1 );

如果您想开发一个自定义的支付网关,可以看教程《 为WooCommerce创建一个支付网关插件 》。

如果您对 WooCommerce 的使用还不太了解,或者想系统学习 WooCommerce 开发,可以学习教程《WooCommerce 开发指南视频课程(使用详解/主题开发/支付宝网关开发)》。

声明:原文出自 https://rudrastyh.com/woocommerce/get-and-hook-payment-gateways.html ,由WordPress大学翻译整理,转载请保留本声明。

倡萌

一个文科IT宅男,喜欢折腾WordPress和被它折腾 ^_^

暂无评论

发表评论