Графический фильтр произвольной формы Gravity Forms

У меня есть функция, которая обрабатывает продажи через стороннюю службу, обрабатывает результат и возвращает массив с статусом "Успех" или "Недействительный". Этот вызов продаж выполняется с использованием gform_after_submission hook, примененного к конкретной форме.

Что мне нужно сделать, так это сохранить результат "Успех" или "Неверный" в массиве как переменную, которую я могу позже передать функции для проверки или аннулирования поля кредитной карты с помощью gform_validation hook.

Я объявляю переменную в функции, например:

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

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

Когда я печатаю переменную $status внутри функции, она показывает либо Success, либо Invalid, как и должна.

Вот другая функция, где мне нужно использовать эту переменную, переданную в 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, поэтому я уверен, что чего-то не хватает. Я был бы признателен за любое направление.

Ответ 1

Запуск действия gform_after_submission выполняется после gform_validation.

В любом случае, предположив, что вы можете найти крючок, который выполняется раньше, я бы сделал, чтобы сохранить уникальную переменную для каждой представленной формы, используя API переходных процессов set_transient() и get_transient(). Например, вы можете создать скрытое поле в каждой форме, которую вы заполняете с помощью случайного идентификатора. Используйте этот случайный идентификатор в качестве ключа для хранения и получения результата Success/Invalid.

Ответ 2

$status Вот локальная переменная, которая никогда не была определена до того, как вы попытаетесь использовать ее в if-состоянии. Таким образом, он всегда null. Возможно, вы пропустили

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

или что-то вроде этого, прежде чем проверять условие.