如何在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
相关产品推荐
相关产品推荐

