在本文中,我想与您分享一些有用的函数,这些函数可用于WooCommerce商店中的支付网关。
您可以在 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
,然后转到商店结帐设置。
无可用网关时强制使用特定支付网关
什么时候需要这个?
让我从生活中描述情况。我的客户有一个基于订阅的网站,安装了 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大学翻译整理,转载请保留本声明。