如何处理Elementor Pro表单数据并将格式化结果存入隐藏字段?
Elementor Pro表单隐藏字段赋值解决方案
需求说明
需要在Elementor Pro表单中生成格式为EXC [用户名字首词] [手机号后四位]的内容(示例:EXC Pedro 1234),并将该值写入表单的隐藏字段,表单包含3个可见字段+1个隐藏字段。
现有脚本问题分析
- 第一段脚本直接修改
$_POST数组,但elementor_pro/forms/new_record钩子触发时,表单数据已完成初始处理,修改$_POST无法同步到表单记录中。 - 第二段脚本遍历
$record->get('fields')时获取的是字段副本,修改后不会同步到原记录对象;且生成的前缀为FAD,与需求的EXC不符。
修正后的脚本
add_action( 'elementor_pro/forms/new_record', function( $record, $handler ) { // 仅对指定表单执行逻辑 $form_name = $record->get_form_settings( 'form_name' ); if ( 'cap-avalanche' !== $form_name ) { return; } // 获取表单字段值,增加空值保护 $fields = $record->get( 'fields' ); $name = trim( $fields['name']['value'] ?? '' ); $phone = $fields['field_3aa9bef']['value'] ?? ''; // 验证必填字段非空 if ( empty( $name ) || empty( $phone ) ) { return; } // 提取用户名字首词 $first_name = explode( ' ', $name )[0]; // 提取手机号后四位(先过滤非数字字符) $clean_phone = preg_replace( '/[^0-9]/', '', $phone ); $last_four = strlen( $clean_phone ) >= 4 ? substr( $clean_phone, -4 ) : $clean_phone; // 生成符合要求的目标字符串 $target_value = "EXC {$first_name} {$last_four}"; // 更新隐藏字段(请确保字段ID为'titulo',否则替换为实际ID) $record->update_field( 'titulo', $target_value ); // 保存更新后的字段数据 $record->update_fields(); }, 10, 2 );
使用注意事项
- 确认字段ID:在Elementor表单编辑器中,编辑隐藏字段,查看「高级」选项卡下的「字段ID」,确保与脚本中的
titulo一致。 - 确认表单名称:在表单设置的「基本」选项卡下查看「表单名称」,确保与脚本中的
cap-avalanche一致。 - 代码添加方式:推荐使用Code Snippets等代码片段插件添加代码,避免直接修改主题
functions.php导致的主题更新丢失或报错问题。 - 测试技巧:可暂时将隐藏字段改为文本字段,提交表单后查看赋值是否成功,确认无误后再改回隐藏字段。
内容的提问来源于stack exchange,提问作者JuxCo
相关产品推荐
相关产品推荐

