Gravity Forms单选按钮标签调用ACF字段值失败问题求助
可能存在的问题&遗漏配置
- ACF字段读取缺少上下文ID:
get_field()方法默认依赖当前主查询的文章ID,若表单开启AJAX加载、嵌入在非文章详情页、或者不在主循环内,会无法正确获取字段值。你需要给get_field()传入对应文章的ID作为第二个参数,例如调用get_queried_object_id()获取当前页面对应的ID。 - 单选选项文本匹配失败:代码中switch判断依赖Gravity Forms后台单选按钮的选项文本和
case的值完全匹配,若存在大小写差异、多余空格、特殊符号不匹配的情况,会无法进入对应的分支,导致$description未赋值。 - 钩子ID配置错误:请确认表单ID、字段ID完全对应:
gform_field_choice_markup_pre_render_{表单ID}_{字段ID},可以进入Gravity Forms表单编辑页,点击对应单选字段,在右侧设置面板顶部查看字段ID,和表单编辑页URL中的form_id参数核对表单ID。 - 逻辑不符合需求:当前代码是在原有单选标签后追加ACF字段内容,而非替换原有标签文本,若你需要直接替换选项文本,需要调整替换逻辑。另外未给
$description设置初始默认值,未匹配到case时会出现未定义变量的问题,无内容输出时会看似代码未生效。 - 代码加载/缓存问题:若代码放在页面模板文件内,AJAX加载表单时不会触发执行;若开启了页面缓存、对象缓存、Gravity Forms表单缓存,需要清除缓存后再测试效果。
修正后参考代码
add_filter( 'gform_field_choice_markup_pre_render_16_11', function ( $choice_markup, $choice, $field, $value ) { // 先给变量赋默认值,避免未定义错误 $new_choice_text = ''; if ( $field->get_input_type() == 'radio' ) { // 传入当前页面ID作为ACF的查询上下文 $post_id = get_queried_object_id(); switch ( rgar( $choice, 'text' ) ) { case "Valg 1": $new_choice_text = get_field('valg_1', $post_id); break; case "Valg 2": $new_choice_text = get_field('valg_2', $post_id); break; case "Valg 3": $new_choice_text = get_field('valg_3', $post_id); break; // 匹配不到时保留原有文本 default: $new_choice_text = rgar( $choice, 'text' ); } } // 替换原有标签文本,若需要追加可以自行调整替换逻辑 if ( ! empty( $new_choice_text ) ) { $original_text = rgar( $choice, 'text' ); $choice_markup = str_replace( $original_text, $new_choice_text, $choice_markup ); } return $choice_markup; }, 10, 4 );
内容的提问来源于stack exchange,提问作者TurboTobias
相关产品推荐
相关产品推荐

