保留表格中的重力表格确认

Retain the form in a gravity form confirmation

在重力表单确认期间(在表单成功填写并用户提交表单后)而不是仅显示确认文本,我还想在确认文本下方显示确认文本和表单本身。

我无法在 gform 的确认设置中使用重定向到页面 url 或页面选项,因为用户正在通过短代码在各种页面上使用该表单(其中一些甚至是硬编码的通过 do_shortcode),他正计划添加更多。

想法是,在用户填写并提交表单后(无论表单位于哪个页面),表单数据将被提交,页面重新加载,显示确认消息并显示实际表单也是(当然所有数据都消失了,新鲜状态)

提前致谢

我就是这样做的。

add_filter( 'gform_pre_submission_filter' , "foo" , 10 , 1 );

function foo ( $form ) {

    global $post;

    // Get current page url
    $current_page_url = get_post_permalink( $post->ID );

    if ( array_key_exists( 'confirmations' , $form ) ) {

        foreach ( $form[ 'confirmations' ] as $key => $confirmation ) {

            $form[ 'confirmations' ][ $key ][ 'type' ] = 'redirect';
            $form[ 'confirmations' ][ $key ][ 'message' ] = '';
            $form[ 'confirmations' ][ $key ][ 'url' ] = $current_page_url;
            $form[ 'confirmations' ][ $key ][ 'queryString' ] = 'message=Form Data Saved';

        }

    }

    if ( array_key_exists( 'confirmation' , $form ) ) {

        $form[ 'confirmation' ][ 'type' ] = 'redirect';
        $form[ 'confirmation' ][ 'message' ] = '';
        $form[ 'confirmation' ][ 'url' ] = $current_page_url;
        $form[ 'confirmation' ][ 'queryString' ] = 'message=Form Data Saved';

    }

    return $form;

}

挂钩到 gform_pre_submission_filter 过滤器,该挂钩的回调将接收 $form 变量。

$form 是一个数组,其中包含有关如何将确认作为子数组处理的详细信息。

它有 2 个,$form['confirmations'],包含为此特定 gform 注册的所有确认。

$form['confirmation'],包含要使用的"Default Confirmation"的数据。更改两者,在我的情况下,我将其更改为 'redirect' 类型,然后提供 url 进行重定向。

我也添加了一个查询字符串数据,这里可以添加空格,gform 会处理转义。

这是在 gform 上测试的,只有 1 次确认,这是 默认确认。

这也在仅包含 1 个 gform 的页面上进行了测试。

如果您有一个包含多个 gform 的页面,这很简单,只需将相关 gform 的 ID 添加到 queryString 中即可。然后更容易提取查询字符串并确定确认消息属于哪个 gform。

您可以通过$form['id']

获取当前gform的id

希望这对任何人都有帮助。

Jplus2 的解决方案在函数末尾缺少一个 return $form;

我还找到了一个更简单的解决方案,方法是向消息中添加简码:

add_filter( 'gform_pre_submission_filter' , "foo_show_confirmation_and_form" , 10 , 1 );
function foo_show_confirmation_and_form($form) {
  $shortcode = '[gravityform id="' . $form['id'] . '" title="true" description="false"]';

  if ( array_key_exists( 'confirmations' , $form ) ) {
    foreach ( $form[ 'confirmations' ] as $key => $confirmation ) {
      $form[ 'confirmations' ][ $key ][ 'message' ] .= $shortcode;
    }
  }

  if ( array_key_exists( 'confirmation' , $form ) ) {
    $form[ 'confirmation' ][ 'message' ] .= $shortcode;
  }
  return $form;
}