Elementor表单带URL参数重定向报错:add_response_data()调用空对象
Elementor表单带URL参数重定向报错修复
我尝试使用Elementor表单实现提交后跳转到带URL参数的页面,编写了如下代码:
add_action( 'elementor_pro/forms/new_record', function( $record, $ajax_handler ) { // 确认是目标表单 $form_name = $record->get_form_settings( 'form_name' ); // 替换为你的表单名称 if ( 'test_form' !== $form_name ) { return; } $raw_fields = $record->get( 'fields' ); $fields = []; foreach ( $raw_fields as $id => $field ) { $fields[ $id ] = $field['value']; } global $wpdb, $post; // 获取当前页面Slug $post_slug = $post->post_name; // 配置重定向URL $redirect_url = '/test2/'.$post_slug.'?f_name='.$fields['f_name']; // 处理短代码 $redirect_to = $record->replace_setting_shortcodes( $redirect_url ); // 设置重定向 $handler->add_response_data( 'redirect_url', $redirect_to ); }, 10, 2);
提交表单时页面显示“error”,调试日志中出现错误:PHP Fatal error: Uncaught Error: Call to a member function add_response_data() on null
错误原因
- 变量名误用:钩子传入的第二个参数是
$ajax_handler,但代码中错误地使用了$handler,导致调用了空对象的方法。 - 页面Slug获取不可靠:AJAX请求中
$post全局变量可能为空,无法正确获取当前页面slug。
修正后的代码
add_action( 'elementor_pro/forms/new_record', function( $record, $ajax_handler ) { // 确认是目标表单 $form_name = $record->get_form_settings( 'form_name' ); if ( 'test_form' !== $form_name ) { return; } // 整理表单字段值并编码 $raw_fields = $record->get( 'fields' ); $fields = []; foreach ( $raw_fields as $id => $field ) { $fields[ $id ] = urlencode( $field['value'] ); // 避免特殊字符导致URL失效 } // 获取来源页面Slug(适配AJAX场景) $referer_url = isset( $_POST['referer'] ) ? $_POST['referer'] : ''; $post_slug = ''; if ( $referer_url ) { $path = parse_url( $referer_url, PHP_URL_PATH ); $path_parts = explode( '/', trim( $path, '/' ) ); $post_slug = end( $path_parts ); } // 构建完整重定向URL $redirect_url = home_url( "/test2/{$post_slug}?f_name={$fields['f_name']}" ); // 设置重定向 $ajax_handler->add_response_data( 'redirect_url', $redirect_url ); }, 10, 2);
关键修改说明
- 将
$handler替换为正确的参数名$ajax_handler - 改用
$_POST['referer']获取来源页面URL,解析得到slug,适配AJAX提交场景 - 用
urlencode()处理字段值,避免特殊字符导致URL失效 - 使用
home_url()生成完整的绝对URL,确保重定向路径正确
修正后,表单提交后会跳转到类似http://example.com/test2/post-slug?f_name=test的页面。
内容的提问来源于stack exchange,提问作者lonelioness
相关产品推荐
相关产品推荐

