You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

错误原因

  1. 变量名误用:钩子传入的第二个参数是$ajax_handler,但代码中错误地使用了$handler,导致调用了空对象的方法。
  2. 页面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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:15:37