如何在Gravity Forms中动态填充WordPress学生自定义文章字段?
解决Gravity Forms表单动态填充学生信息的问题
原代码的核心问题
- 短码名称冲突:Gravity Forms自带
gravityform短码,你自定义的同名短码会被原短码覆盖,导致自定义逻辑不生效。 - 字段键不匹配:
field_values里的键必须对应Gravity Forms表单字段的输入名称(Input Name)或字段ID,而不是你自定义的字段标签,原代码用的student_name和student_admission_number如果和表单字段的实际标识不符,就无法完成填充。 - 当前文章获取不稳定:
get_post()在某些页面上下文(比如侧边栏、非主循环区域)可能无法正确获取当前学生文章对象。
修正后的实现方案
1. 替换自定义短码名称,避免冲突
把自定义短码改成独特名称,同时用更稳定的方式获取当前文章:
// 自定义短码:动态填充学生信息的赞助表单 function custom_student_sponsor_form_shortcode( $atts ) { // 获取当前查询的文章(比get_post()适配场景更多) $current_post = get_queried_object(); // 仅在Student自定义文章类型页面生效 if ( ! $current_post || $current_post->post_type !== 'student' ) { return ''; } // 获取学生信息:文章标题作为姓名,ACF字段获取录取编号 $student_name = $current_post->post_title; $student_admission_number = get_field( 'student_admission_number', $current_post->ID ); // 从短码参数获取表单ID $form_id = isset( $atts['id'] ) ? $atts['id'] : ''; if ( empty( $form_id ) ) { return '请指定表单ID'; } // 关键:替换为你Gravity Forms字段的实际输入名称/字段ID $field_values = array( // 示例:如果学生姓名字段的输入名称是"student_name"则用这个,或者用字段ID如"1" 'student_name' => $student_name, // 示例:如果录取编号字段的输入名称是"student_admission_number"则用这个,或者用字段ID如"2" 'student_admission_number' => $student_admission_number ); // 渲染表单:参数依次是表单ID、是否显示标题、是否显示描述、是否启用AJAX、字段值、是否返回内容 return gravity_form( $form_id, false, false, true, $field_values, true ); } add_shortcode( 'custom_student_sponsor_form', 'custom_student_sponsor_form_shortcode' );
2. 确认Gravity Forms字段的输入名称/ID
- 进入Gravity Forms表单编辑页面,点击要填充的「学生姓名」字段,切换到高级选项卡,找到「输入名称」(默认可能是
input_1,你可以改成student_name方便识别)。 - 同样操作「学生录取编号」字段,记录它的输入名称或字段ID(比如
input_2或自定义的student_admission_number)。 - 把代码里
$field_values的键替换成你记录的实际值。
3. 在学生文章页面调用短码
在Student自定义文章类型的模板或文章内容中,使用新短码:
[custom_student_sponsor_form id="你的表单ID"]
额外排查点
- 确保ACF字段
student_admission_number已经正确关联到Student自定义文章类型。 - 如果表单还是不显示数据,开启WordPress调试模式,查看是否有报错信息(比如ACF字段未找到、表单ID错误等)。
内容的提问来源于stack exchange,提问作者Mutai Kelvin
相关产品推荐
相关产品推荐

