保留表格中的重力表格确认
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;
}
在重力表单确认期间(在表单成功填写并用户提交表单后)而不是仅显示确认文本,我还想在确认文本下方显示确认文本和表单本身。
我无法在 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;
}