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

如何在Elementor Forms new_record钩子中获取表单提交ID?

在Elementor Forms的new_record钩子中获取表单提交ID的实现方法

完全可以在new_record钩子中获取已存储的表单提交ID,具体实现如下:

  • 借助new_record钩子的$record参数提取提交ID:当Elementor Forms启用save_to_database功能时,表单提交记录写入数据库后会触发该钩子,此时$record对象已包含自动生成的提交ID,通过$record->get('id')即可直接获取。
  • 基于该ID编写自定义元数据插入逻辑,务必使用WordPress内置的$wpdb类执行数据库操作,避免SQL注入风险。

代码示例

add_action( 'elementor/forms/new_record', 'add_custom_metadata_to_form_submission', 10, 2 );

function add_custom_metadata_to_form_submission( $record, $handler ) {
    // 仅处理启用了保存到数据库的表单提交
    if ( ! $handler->get_settings( 'save_to_database' ) ) {
        return;
    }

    // 获取已存储的表单提交ID
    $submission_id = $record->get( 'id' );
    if ( empty( $submission_id ) ) {
        return;
    }

    global $wpdb;
    $meta_table = $wpdb->prefix . 'elementor_form_submissions_meta';

    // 自定义元数据示例:添加名为"custom_user_agent"的元数据,值为当前请求的用户代理
    $wpdb->insert(
        $meta_table,
        [
            'submission_id' => $submission_id,
            'meta_key'      => 'custom_user_agent',
            'meta_value'    => $_SERVER['HTTP_USER_AGENT'],
        ],
        [
            '%d',
            '%s',
            '%s',
        ]
    );
}

关键说明

  • $record->get('id')仅在记录成功写入数据库时返回有效ID,若未启用save_to_database则该值为空,因此需要先做判断过滤。
  • 使用$wpdb->insert()而非直接拼接SQL语句,通过格式化参数(%d表示整数、%s表示字符串)防止SQL注入,符合WordPress开发规范。
  • 元数据表默认名称为wp_elementor_form_submissions_meta,可根据实际数据库前缀调整前缀部分。

内容的提问来源于stack exchange,提问作者Lupin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:30:43