【问题标题】:Gravity Forms custom validation filterGravity Forms 自定义验证过滤器
【发布时间】:2015-08-01 21:36:23
【问题描述】:

我有一个函数通过第三方服务处理销售,处理结果并返回一个状态为“成功”或“无效”的数组。此销售电话是使用应用于特定表单的 gform_after_submission 挂钩进行的。

我需要做的是将“成功”或“无效”结果作为变量存储在数组中,稍后我可以使用 gform_validation 挂钩将其传递给函数以验证或使信用卡字段无效。

我在函数中声明变量,如下所示:

function foo { 
...code to sell product through API...

$status = $checkoutShoppingCartRequest['Result']['Status'];
}

当我在函数中打印变量 $status 时,它应该显示成功或无效。

这是我需要使用此变量的其他函数,传递给 gform_validation,无论结果是成功还是无效,每次都会失败:

function MBvalidate( $validation_result ) {
$form = $validation_result['form'];
if ( $status !== "Success") {
    $validation_result['is_valid'] = false;
    foreach( $form['fields'] as &$field ) {
        if ( $field->id == '34' ) {
            $field->failed_validation = true;
            $field->validation_message = 'Your credit card could not be processed.';
            break;
        }
    }
}
//Assign modified $form object back to the validation result
$validation_result['form'] = $form;
return $validation_result;

}

add_filter( 'gform_validation_47', 'MBvalidate' );

我尝试过通过全局变量和会话等多种不同方式传递变量。

我是 GF 开发的新手,所以我确信我遗漏了一些东西。我会很感激任何方向。

【问题讨论】:

  • 你从哪里经过? $status 回调函数中的变量?你有var_dump($validation_result) 变量吗?
  • 我假设您通过在 global 函数内添加 global 关键字来使变量成为全局变量 MBvalidate()global $status ,对吗?此外,您还必须将 global 关键字放在 foo() 函数中

标签: php wordpress gravity gravity-forms-plugin


【解决方案1】:

gform_after_submission 动作钩子在 gform_validation 之后运行。

无论如何,假设您可以运行较早的find a hook,我会使用Transients APIset_transient()get_transient() 函数为每个提交的表单存储一个唯一变量。例如,您可以在使用random ID 填充的每个表单中创建一个隐藏字段。使用此随机 ID 作为密钥来存储和检索成功/无效结果。

【讨论】:

    【解决方案2】:

    $status 这是一个在你尝试在 if 条件下使用它之前从未定义过的局部变量。所以,它总是null。 也许你错过了

    $status = $validation_result['Result']['Status'];
    

    在检查条件之前或类似的东西。

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 1970-01-01
      • 2014-03-03
      • 2020-02-14
      • 2016-12-11
      • 2016-11-11
      • 1970-01-01
      • 2022-06-10
      • 2018-08-09
      相关资源
      最近更新 更多