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

Gravity Forms技术问题:如何将Quiz单选框移入Label元素

解决Gravity Forms Quiz Addon单选框无法将Input移入Label的问题

你遇到的问题核心很明确:你的过滤函数只针对普通单选框字段(type为radio),但Gravity Forms Quiz Addon生成的测验单选框,它的字段类型是quiz,不是radio,所以你的判断条件直接把测验字段排除在外了,自然不会生效。

另外,Quiz字段还有一些专属的样式类(比如gquiz-correct-choice)和指示器图标,原来的代码也没处理这些,就算触发了也会丢失Quiz的专属样式和标记。

修复方案

我们需要调整过滤函数的判断条件,同时兼容普通radio字段和Quiz的quiz字段,还要补上Quiz专属的样式和指示器逻辑:

// 将单选框Input移入Label内(兼容普通单选框和Quiz测验单选框)
add_filter("gform_field_choices", "radio_input_inside_label", 10, 2);
function radio_input_inside_label($choices, $field){
    // 同时处理普通radio字段和Quiz的quiz字段
    if( !in_array($field["type"], ["radio", "quiz"]) ) return $choices;
    
    $choices = "";
    if(is_array($field["choices"])){
        $choice_id = 0;
        $count = 1;
        $logic_event = !empty($field["conditionalLogicFields"]) ? "onclick='gf_apply_rules(" . $field["formId"] . "," . GFCommon::json_encode($field["conditionalLogicFields"]) . ");'" : "";
        
        foreach($field["choices"] as $choice){
            $id = $field["id"] . '_' . $choice_id++;
            $field_value = !empty($choice["value"]) || rgar($field, "enableChoiceValue") ? $choice["value"] : $choice["text"];
            $checked = rgar($choice,"isSelected") ? "checked='checked'" : "";
            $tabindex = GFCommon::get_tabindex();
            
            // 处理Quiz专属的样式类和指示器图标
            $quiz_classes = "";
            $quiz_indicator = "";
            // 判断当前选项是否是Quiz的正确/错误选项
            if($field["type"] === "quiz"){
                if(rgar($choice, "isCorrect")){
                    $quiz_classes = "gquiz-correct-choice";
                    $indicator_src = GFCommon::get_base_url() . "/plugins/gravityformsquiz-master/images/tick.png";
                    $quiz_indicator = sprintf("<img class='gquiz-indicator' src='%s' alt='Correct response'>", esc_url($indicator_src));
                } elseif(rgar($choice, "isIncorrect")){
                    $quiz_classes = "gquiz-incorrect-choice";
                    $indicator_src = GFCommon::get_base_url() . "/plugins/gravityformsquiz-master/images/cross.png";
                    $quiz_indicator = sprintf("<img class='gquiz-indicator' src='%s' alt='Incorrect response'>", esc_url($indicator_src));
                }
            }
            
            // 生成Input元素
            $input = sprintf("<input name='input_%d' type='radio' value='%s' %s id='choice_%s' %s %s />", 
                $field["id"], 
                esc_attr($field_value), 
                $checked, 
                $id, 
                $tabindex, 
                $logic_event
            );
            
            // 拼接最终的HTML结构,包含Quiz的样式和指示器
            $choices .= sprintf("<li class='gchoice_%s'><label for='choice_%s' id='label_%s' class='%s'>%s %s %s</label></li>", 
                $id, 
                $id, 
                $id, 
                $quiz_classes, 
                $choice["text"], 
                $input, 
                $quiz_indicator
            );
            $count++;
        }
    }
    return $choices;
}

关键修改点说明

  • 字段类型判断:把原来的if($field["type"] != "radio")改成if( !in_array($field["type"], ["radio", "quiz"]) ),这样同时处理普通单选框和Quiz字段。
  • Quiz专属样式与指示器:新增逻辑判断当前选项是否为Quiz的正确/错误选项,自动添加对应的样式类和指示器图标,保证Quiz的视觉反馈正常。
  • Label的ID属性:补上了原来缺失的id="label_xxx"属性,和原生Gravity Forms的结构保持一致,避免兼容性问题。

把这段代码替换你原来的函数,放到子主题的functions.php里,测验单选框的Input就会被正确移入Label标签内了。

内容的提问来源于stack exchange,提问作者TinyTiger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:52:52