获取重力形式输入值,作为变量存储在functions.php

时间:2019-03-01 16:58:50

标签: wordpress woocommerce gravityforms

我有一个带有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');

我觉得我接近了。但是,即使选择了其他无线电选项,它也会删除网关。

如果可以的话,任何帮助将不胜感激。

1 个答案:

答案 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回调。但是,如果不仔细检查代码,我不知道是否可能。