Gravity Forms自定义验证过滤器

Nie*_*che 10 php wordpress gravity gravity-forms-plugin

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

我需要做的是将数组中的"Success"或"Invalid"结果存储为变量,我稍后可以使用gform_validation钩子将其传递给函数以验证或使信用卡字段无效.

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

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

$status = $checkoutShoppingCartRequest['Result']['Status'];
}
Run Code Online (Sandbox Code Playgroud)

当我在函数中打印变量$ 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' );
Run Code Online (Sandbox Code Playgroud)

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

我是GF开发的新手,所以我确信我错过了一些东西.我很欣赏任何方向.

Ser*_*nko 0

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

$status = $validation_result['Result']['Status'];
Run Code Online (Sandbox Code Playgroud)

或者在检查条件之前进行类似的操作。