Gravity Forms自定义验证过滤器

时间:2015-05-20 14:45:37

标签: php wordpress gravity gravity-forms-plugin

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

我需要做的是存储"成功"或"无效"导致数组作为变量,我可以使用gform_validation hook将其传递给函数以验证或使信用卡字段无效。

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

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

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

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

这是我需要使用此变量的其他函数,传递给gform_validation,无论Success还是Invalid result,都会每次都失败:

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发展的新手,所以我确信我错过了一些东西。我很欣赏任何方向。

2 个答案:

答案 0 :(得分:1)

gform_after_submission操作挂钩在 gform_validation后运行

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

答案 1 :(得分:0)

<?php chkServer('gateway.sandbox.push.apple.com', 2195); //chkServer('gateway.push.apple.com',2195); function chkServer($host, $port) { $hostip = @gethostbyname($host); if ($hostip == $host) { echo "Server is down or does not exist"; } else { if (!$x = @fsockopen($hostip, $port, $errno, $errstr, 5)) { echo "Port $port is closed."; } else { echo "Port $port is open."; if ($x) { @fclose($x); } } } } ?> 这是一个局部变量,在尝试在if-condition中使用它之前从未定义过。所以,它总是$status。 也许你错过了

null
在检查条件之前

或类似的东西。