我有一个WooCommerce网站,提供重力表单和一个名为WooCommerce重力表单产品附加组件的插件,允许我向产品添加重力表单。
我想隐藏一个woocommerce支付网关的基础上选择的一个无线电输入的重力形式是对产品。
我知道表单的ID是1,我感兴趣的字段(单选输入)是字段8。
我已经尝试了一些基于Gravity Forms文档以及来自支付网关和StackOverflow帖子的文档的东西。
// remove Partial.ly for hospice selection
add_action('gform_after_submission_1', 'get_hospice_info', 10, 2);
function get_hospice_info($entry, $form) {
$hospiceinfo = $entry['8'];
}
function hospice_selector_remove_partially($gateway) {
if ($hospiceinfo = "Yes, member under hospice or hospital care") {
$unset = true;
}
if ( $unset == true ) unset( $gateway['partially'] );
return $gateway;
} add_action('woocommerce_available_payment_gateways','hospice_selector_remove_partially');
我觉得我很接近了。但是它正在删除网关,即使选择了其他无线电选项。
如果可能的话,任何帮助都将不胜感激。
2条答案
按热度按时间bkhjykvo1#
詹娜
get_hospice_info
函数设置了一个变量$hospiceinfo
,该变量只存在于该特定函数的scope中。因此,$hospiceinfo
在hospice_selector_remove_partially
函数中是未定义的。您必须将$hospiceinfo
设置为全局变量。其次,即使变量在
hospice_selector_remove_partially
函数中可用,该函数第一行中的单个=
实际上将变量设置为等于值“Yes,member under hospice or hospital care”。您至少需要两个==
来比较该值。这是一个经常被忽视的拼写错误,这就是为什么WP声明Yoda条件是最佳实践的原因。请参见以下代码,这些代码解决了上面列出的问题,并删除了不必要的代码:
现在,这个答案假设这两个操作都是在同一个页面加载过程中调用的,并且
gform_after_submission
操作是在woocommerce_available_payment_gateways
操作之前调用的,这需要进行验证,以确保上面的代码实际上提供了所需的结果。理想情况下,您可以在
woocommerce_available_payment_gateways
操作期间获取hospice_info
字段的值,并完全取消gform_after_submission
回调。但是,如果不彻底检查代码,我不知道这是否可行。piok6c0g2#
你可以遍历所有的购物车项目并得到GravityField的值,然后使用if逻辑来取消设置运输方式