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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:15:02