У меня есть функция, которая обрабатывает продажи через сторонний сервис, обрабатывает результат и возвращает массив со статусом «Успешно» или «Недействительно». Этот запрос на продажу осуществляется с помощью хука 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, поэтому я уверен, что что-то упустил. Буду признателен за любое направление.
gform_after_submission
действие крюк работает после gform_validation
,
Во всяком случае, если вы можете найти крючок который запускается раньше, я бы сохранил уникальную переменную для каждой отправленной формы, используя API переходных процессов«s set_transient()
а также get_transient()
функции. Например, вы можете создать скрытое поле в каждой форме, которую вы заполняете случайный идентификатор. Используйте этот случайный идентификатор в качестве ключа для сохранения и получения результата «Успешный / неверный».
$status
здесь локальная переменная, которая никогда не была определена до того, как вы попытаетесь использовать ее в условии if. Так что это всегда null
,
Может быть, вы пропустили
$status = $validation_result['Result']['Status'];
или что-то вроде этого перед проверкой состояния.