关于重力表单重定向的逻辑

时间:2015-08-04 作者:eristic

我正在设置一系列问题,并根据答案,尝试重定向到特定页面。例如,问题必须正确回答,他们必须是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;
     }

} 
我做错了什么?逻辑工作不正常。

任何帮助都将不胜感激。

谢谢

2 个回复
最合适的回答,由SO网友:eristic 整理而成

如果有人遇到这个问题,答案就在于gform\\u提交后会在gform\\u之后启动gform\\u确认。逻辑正确,但在发送确认之前,未存储第5个会话变量。因此,没有任何变量等于“否”,并且每次都失败。

解决方案是在gform\\U确认中调用$条目,并在条件逻辑中使用它:

$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\')));
      }

SO网友:jdm2112

在不测试代码的情况下,我认为问题在于表单中所需的数据结构。Gravity表单将提交的表单内容存储在如下数组中

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
它是一个多维数组,每个字段都有自己的ID,并有多种方式访问提交的值。

在本例中,订阅者的名称字段的字段ID为17。访问该值的最简单方法是$form[\'field\'][17].

在代码中,您似乎构建了一个数组$result[] 但您并不是在测试特定字段的“是”结果。

我建议var_dump() 首先检查表单结果的内容,找到要测试某个值的字段,然后从那里开始。

结束