Логика по перенаправлению форм тяжести

Я задаю ряд вопросов и основываясь на ответах, я пытаюсь перенаправить на определенную страницу. Например, вопросы должны отвечать правильно, они должны быть мужчинами и старше 65 лет. Для другого, правильные вопросы, они должны быть женщинами и старше 55 лет. Вот код, который я использую ниже. Я обращаюсь к переменным сеанса и могу их распечатать под вопросами, когда я перехожу по каждому вопросу.

add_filter( 'gform_confirmation_6', __NAMESPACE__ . '\\custom_confirmation', 10, 4 ); function custom_confirmation($confirmation, $form, $entry, $ajax) { session_start(); if(isset($_SESSION['form'])) { $result = array(); foreach($_SESSION['form'] as $row){ $result[] = $row; } if ($result[0] == 'Yes' && $result[1] == 'Male' && $result[2] >= 65 && $result[3] == 'No' && $result[5] == 'No' ) { $confirmation = array('redirect' => esc_url(home_url('/welcome'))); } elseif($result[0] == 'Yes' && $result[1] == 'Female' && $result[2] >= 55 && $result[3] == 'No' && $result[5] == 'No' ) { $confirmation = array('redirect' => esc_url(home_url('/welcome'))); } else { $confirmation = array('redirect' => esc_url(home_url('/sorry-you-do-not-qualify'))); } return $confirmation; } } 

Что я здесь делаю неправильно? Логика работает некорректно.

Любая помощь приветствуется.

Благодаря!

Solutions Collecting From Web of "Логика по перенаправлению форм тяжести"

Если кто-то сталкивается с этой проблемой, ответ заключается в том, что gform_confirmation запускается после gform_after_submission. Логика правильная, однако 5-я переменная сеанса не была сохранена до отправки подтверждения. Поэтому никакая переменная никогда не сравнивалась с «Нет», и она терпела неудачу каждый раз.

Решением является вызов $ entry в gform_confirmation и использование его ниже в условной логике:

 $question6 = $entry['1']; if(isset($_SESSION['form'])) { $result = array(); foreach($_SESSION['form'] as $row){ $result[] = $row; } if ($result[0] === 'Yes' && $result[1] === 'Male' && $result[2] >= 65 && $result[3] === 'No' && $question6 === 'No' ) { $confirmation = array('redirect' => esc_url(home_url('/welcome'))); } 

Не проверяя код, я считаю, что проблема заключается в структуре данных, которые вы ожидаете от формы. Gravity Forms сохранит содержимое представленной формы в массиве, подобном этому

 Array ( [form_id] => 4 [entry_id] => 58 [form_title] => Auto Bill Pay Form [form_description] => [date_created] => 3/8/2015 [date_created_usa] => 8/3/2015 [pages] => [misc] => Array ( [date_time] => 2015-08-03 22:17:19 [time_24hr] => 22:17 [time_12hr] => 10:17pm [is_starred] => 0 [is_read] => 0 [ip] => 97.77.25.130 [source_url] => http://example/ [post_id] => [currency] => USD [payment_status] => [payment_date] => [transaction_id] => [payment_amount] => [is_fulfilled] => [created_by] => 1 [transaction_type] => [user_agent] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36 [status] => active ) [field_descriptions] => Array ( [17] => (Please enter subscriber's name above if different than payment info) [1] => [2] => [8] => [15] => Confirmation will be sent to the e-mail address we have on file when the transaction is complete. Please keep your e-mail address up-to-date. [9] => [10] => [11] => [13] => [12] => [14] => ) [field] => Array ( [17.Subscriber's Name] => George Washington [17] => George Washington [Subscriber's Name] => George Washington 

Это многомерный массив с каждым полем, имеющим собственный идентификатор и несколько способов доступа к представленному значению.

В этом примере поле имени абонента имеет идентификатор поля 17. Самый простой способ доступа к этому значению – это $form['field'][17] .

В вашем коде создается массив $result[] но вы не проверяете определенное поле для своего результата «да».

Я бы рекомендовал var_dump() результата формы сначала изучить содержимое, найти поле, которое вы хотите проверить для определенного значения, и перейти оттуда.