我有一个带有Gravity表单的WooCommerce网站和一个名为WooCommerce Gravity Forms产品附加组件的插件,该插件使我可以向产品添加Gravity Forms表单。
我想根据产品上的重力表中无线电输入之一的选择来隐藏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');
我觉得我接近了。但是,即使选择了其他无线电选项,它也会删除网关。
如果可以的话,任何帮助将不胜感激。
答案 0 :(得分:1)
Janna-
get_hospice_info
函数设置变量$hospiceinfo
,该变量仅位于该特定函数的scope中。因此,$hospiceinfo
函数中的hospice_selector_remove_partially
将是未定义的。您必须将$hospiceinfo
设置为全局变量。
第二,即使该变量在hospice_selector_remove_partially
函数中可用,该函数第一行中的单个=
实际上也将变量设置为等于“是的,在临终关怀或医院的成员”关心”。您至少需要两个==
才能比较该值。这是一个经常被忽略的错字,这就是WP指出yoda conditions是最佳实践的原因。
请参见下面的代码,这些代码可以解决上面列出的问题,并删除不必要的代码:
add_action('gform_after_submission_1', 'get_hospice_info', 10, 2);
function get_hospice_info($entry, $form) {
global $hospiceinfo;
$hospiceinfo = $entry['8'];
}
function hospice_selector_remove_partially($gateway) {
global $hospiceinfo;
if ("Yes, member under hospice or hospital care" == $hospiceinfo ) {
unset( $gateway['partially'] );
}
return $gateway;
}
add_action('woocommerce_available_payment_gateways','hospice_selector_remove_partially');
现在,此答案假定在同一页面加载期间同时调用了这两个操作,并且在gform_after_submission
操作之前调用了woocommerce_available_payment_gateways
操作。必须对此进行验证,以确保上面的代码将真正提供所需的结果。
理想情况下,您将在hospice_info
操作期间获取woocommerce_available_payment_gateways
字段的值,并完全取消gform_after_submission
回调。但是,如果不仔细检查代码,我不知道是否可能。