如何为未登录用户生成Gravity Form提交时的Save and Continue链接并跳转登录
解决方案
实现思路
通过拦截未登录用户在第6步的提交动作,调用Gravity Form原生的保存草稿接口生成带gf_token的恢复链接,将该链接作为登录后的跳转目标传入登录页,用户登录成功后直接跳转至该恢复链接,Gravity Form会自动根据token恢复之前的填写内容和当前步骤(第6步),同时通过过滤器禁用原生的保存成功提示页,直接跳转登录页。
前置操作
首先在Gravity Form表单后台的「设置-表单布局」中,勾选启用「保存并稍后继续」功能。
代码实现
所有PHP代码可添加到主题functions.php文件或自定义功能插件中,JS代码添加到表单所在页面的自定义脚本区域。
1. 后端配置代码
// 向前端传递用户登录状态和表单配置 add_action('wp_enqueue_scripts', 'custom_gf_localize_script'); function custom_gf_localize_script() { wp_localize_script('jquery', 'customGFConfig', [ 'is_logged_in' => is_user_logged_in(), 'target_form_id' => 123 // 替换为你的多步骤表单实际ID ]); } // 禁用原生保存成功提示页,跳转至登录页 add_filter('gform_save_continue_redirect', 'custom_gf_save_redirect', 10, 4); function custom_gf_save_redirect($redirect_url, $form, $entry, $token) { // 仅对目标表单、未登录用户生效 if($form['id'] == customGFConfig.target_form_id && !is_user_logged_in()) { // 拼接表单恢复链接作为登录后跳转目标 $resume_url = get_permalink().'/?gf_token='.$token; return wp_login_url($resume_url); } return $redirect_url; } // 适配登录后跳转逻辑 add_filter('login_redirect', 'custom_gf_login_redirect', 10, 3); function custom_gf_login_redirect($redirect_to, $request, $user) { // 恢复链接包含gf_token直接放行 if(str_contains($redirect_to, 'gf_token')) { return $redirect_to; } return $redirect_to; }
2. 前端交互代码
jQuery(document).ready(function($) { // 已登录用户/非目标表单不执行逻辑 if(customGFConfig.is_logged_in || !$('#gform_'+customGFConfig.target_form_id).length) return; // 监听表单提交事件 $('#gform_'+customGFConfig.target_form_id).on('submit', function(e) { // 仅在第6步提交时触发逻辑 const currentPage = $('.gform_page_current').data('page'); if(currentPage !== 6) return; // 阻止默认提交,先调用原生保存草稿逻辑 e.preventDefault(); window.gform.applyFilters('gform_save_continue', true, $(this)); }); });
注意事项
- 请将代码中
123替换为你的多步骤表单实际ID - 如果你使用自定义登录页,请将代码中的
wp_login_url替换为你自定义登录页地址,同时确保该登录页支持redirect_to参数的跳转逻辑 - 测试时可使用浏览器隐身窗口模拟未登录用户,验证从第6步提交、跳转登录、登录后恢复表单的全流程是否正常
内容的提问来源于stack exchange,提问作者Parthavi Patel
相关产品推荐
相关产品推荐

