Пользовательский фильтр проверки Gravity Forms

У меня есть функция, которая обрабатывает продажи через сторонний сервис, обрабатывает результат и возвращает массив со статусом «Успешно» или «Недействительно». Этот запрос на продажу осуществляется с помощью хука 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, поэтому я уверен, что что-то упустил. Буду признателен за любое направление.

10

Решение

gform_after_submission действие крюк работает после gform_validation,

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

1

Другие решения

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

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

или что-то вроде этого перед проверкой состояния.

0

По вопросам рекламы [email protected]