Графический фильтр произвольной формы 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'];
или что-то вроде этого, прежде чем проверять условие.