获取自定义支付网关数据作为 Woocommerce 3 中的设置

Posted

技术标签:

【中文标题】获取自定义支付网关数据作为 Woocommerce 3 中的设置【英文标题】:Get custom payment gateway data as settings in Woocommerce 3 【发布时间】:2019-03-21 11:59:12 【问题描述】:

我正在制作一个自定义支付网关。复杂的部分进展顺利,但我现在已经被困在一些愚蠢的事情上好几个小时了。

我已经为网关创建了自定义设置,没有问题,可以设置和保存,但我不知道如何在其他功能中调用它们。

如果我将var_dump($this->get_option('title')) 放在自定义网关类(extends WC_Payment_Gateway)中,它将正确显示在设置页面的顶部。在其他地方,它不会。我现在已经尝试了数百种方法,比如尝试通过 $this = new WC_Custom_Gateway 访问这个类,将涉及的函数公开,并利用 init_settings().. 我确信有一个非常简单的解决方案,但作为初学者我只是看不到它。我也试过检查其他人的工作也无济于事。

如何使这些设置在定义它们的类之外可用?

【问题讨论】:

【参考方案1】:

使用以下代码,您可以使用WC_Payment_Gateways 和WC_Payment_Gateway 方法显示支付网关设置中的必要数据:

// HERE define you payment gateway ID (from $this->id in your plugin code)
$payment_gateway_id = 'bacs';

// Get an instance of the WC_Payment_Gateways object
$payment_gateways   = WC_Payment_Gateways::instance();

// Get the desired WC_Payment_Gateway object
$payment_gateway    = $payment_gateways->payment_gateways()[$payment_gateway_id];

// Display saved Settings example:
echo '<p>Title: ' . $payment_gateway->title . '</p>';
echo '<p>Description: ' . $payment_gateway->description . '</p>';
echo '<p>Instructions: ' . $payment_gateway->instructions . '</p>';

// Display all the raw data for this payment gateway 
echo '<pre>'; print_r( $payment_gateway ); echo '</pre>'; 

或者,您也可以使用这种更短的方式:

// You will have to replace 'bacs' by your payment gateway ID (from $this->id in your plugin code)
$payment_gateway = WC()->payment_gateways->payment_gateways()['bacs'];

// and so on …

经过测试并且有效。

你也可以在$payment_gateway上使用一些WC_Payment_Gateway方法

【讨论】:

我还没有尝试过,但这看起来正是我需要的!我从没想过要尝试 ::instance() ,非常感谢! 更短的方式也可以很好地工作:$payment_gateway = WC()-&gt;payment_gateways-&gt;payment_gateways()['bacs'];(您将在其中将“bacs”替换为您的支付网关 ID)... 附加问题,如果您/任何人有时间 - 中间部分“payment_gateways()”的目的是什么?其他一切都很清楚,但我不明白那部分在做什么,就好像它把一个对象作为一个函数调用,然后又作为一个数组调用? payment_gateways()WC_Payment_Gateways 方法,它将专门获取所有现有和已定义WC_Payment_Gateway (单数名称类) 对象的数组 +1 表示WC_Payment_Gateways::instance(); - 我使用的是new WC_Payment_Gateways(),但这使我的实际chosen 值毫无用处。这将正确获取实际的、当前的结帐网关设置。

以上是关于获取自定义支付网关数据作为 Woocommerce 3 中的设置的主要内容,如果未能解决你的问题,请参考以下文章

使用重定向的 Woocommerce 自定义支付网关工作流程

添加一个复选框作为禁用支付网关的 WooCommerce 管理产品选项

WooCommerce 自定义支付网关集成不执行 POST

使用自定义 Woocommerce 支付网关的“下订单按钮”的 Javascript 覆盖

WooCommerce Stripe 支付网关自定义 javascript 冲突

在 Woocommerce 中为特定支付网关添加自定义费用