WordPress插件表单提交后如何动态获取重定向目标URL
动态获取表单提交页面URL的重定向方案
针对你的场景,推荐以下两种无需AJAX、保持POST提交的可行方案,优先使用第一种:
方案一:表单添加隐藏字段存储当前页面URL
这是最可靠的方式,通过在表单中主动嵌入当前页面的URL,处理时直接读取该值完成重定向。
步骤1:在短码渲染的表单中添加隐藏字段
在你输出表单的短码函数里,加入一个隐藏字段,存储当前页面的永久链接:
<form action="<?php echo esc_attr( admin_url( 'admin-post.php' ) ); ?>" method="post"> <!-- 其他表单字段 --> <input type="hidden" name="redirect_url" value="<?php echo esc_url( get_permalink() ); ?>"> <!-- 提交按钮 --> <button type="submit">提交</button> </form>
get_permalink()会自动获取当前页面的URL,配合esc_url()确保输出安全。
步骤2:在表单处理函数中使用该URL重定向
在no1_evaluate_remember_form函数里,读取隐藏字段的值并验证合法性,再完成重定向:
public function no1_evaluate_remember_form() { // 你的表单逻辑处理,生成$form_eva_result // 获取提交的重定向URL,默认回首页 $redirect_url = isset( $_POST['redirect_url'] ) ? esc_url_raw( $_POST['redirect_url'] ) : home_url(); // 验证URL属于当前站点,防止恶意跳转漏洞 if ( ! wp_validate_redirect( $redirect_url, home_url() ) ) { $redirect_url = home_url(); } wp_redirect( esc_url_raw( add_query_arg( array( 'info' => $form_eva_result, // 注意:不要直接传递整个$_POST,建议只传需要的字段,避免URL过长和敏感信息泄露 'response' => wp_unslash( $_POST['your_required_field'] ), // 替换为实际需要的字段名 ), $redirect_url ) ) ); exit; }
方案二:使用HTTP Referer(备用)
如果不想修改表单结构,可以尝试读取浏览器发送的Referer头,但该方式依赖浏览器设置,兼容性不如方案一。
在处理函数中添加以下逻辑:
public function no1_evaluate_remember_form() { // 你的表单逻辑处理,生成$form_eva_result $redirect_url = home_url(); // 默认回首页 if ( isset( $_SERVER['HTTP_REFERER'] ) ) { $referrer = esc_url_raw( $_SERVER['HTTP_REFERER'] ); // 验证Referer属于当前站点 if ( wp_validate_redirect( $referrer, home_url() ) ) { $redirect_url = $referrer; } } wp_redirect( esc_url_raw( add_query_arg( array( 'info' => $form_eva_result, 'response' => wp_unslash( $_POST['your_required_field'] ), ), $redirect_url ) ) ); exit; }
安全提示
- 禁止直接传递整个
$_POST数组:URL长度有限制,且可能包含敏感信息,建议只传递必要的字段。 - 必须验证重定向URL:使用
wp_validate_redirect()确保跳转目标是本站域名,避免开放重定向攻击。
内容的提问来源于stack exchange,提问作者cortlieb
相关产品推荐
相关产品推荐

