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

如何将Contact Form7动态复选框转为隐藏字段或不可取消勾选状态

解决方案

方案1:转为同ID/名称的隐藏字段

利用Contact Form7的wpcf7_form_tag钩子,在标签渲染前判断选项数量,动态替换为隐藏字段:

add_filter('wpcf7_form_tag', 'convert_single_checkbox_to_hidden', 10, 2);
function convert_single_checkbox_to_hidden($tag, $unused) {
    // 只针对目标复选框标签
    if ($tag['name'] !== 'checkbox_options') {
        return $tag;
    }

    // 获取用户元数据中的选项(替换为你实际的获取逻辑)
    $user_id = get_current_user_id();
    $options = get_user_meta($user_id, 'my_user_data', true);
    $options = is_array($options) ? $options : array($options);

    // 仅单个选项时,修改为隐藏字段
    if (count($options) === 1) {
        $tag['type'] = 'hidden';
        $tag['basetype'] = 'hidden';
        // 设置隐藏字段默认值为唯一选项
        $tag['values'] = $options;
        $tag['raw_values'] = $options;
    }

    return $tag;
}

这段代码会在表单标签渲染时,检测目标复选框的选项数量,当仅存在1个选项时,强制将标签类型转为隐藏字段,同时保留原有的name和id属性,确保提交数据正常传递。

方案2:保留可见状态,设置为已勾选且不可取消

通过wpcf7_form_tag钩子,给单个选项添加checked和disabled属性,同时补充隐藏字段确保数据能正常提交:

add_filter('wpcf7_form_tag', 'force_single_checkbox_checked_disabled', 10, 2);
function force_single_checkbox_checked_disabled($tag, $unused) {
    if ($tag['name'] !== 'checkbox_options') {
        return $tag;
    }

    $user_id = get_current_user_id();
    $options = get_user_meta($user_id, 'my_user_data', true);
    $options = is_array($options) ? $options : array($options);

    if (count($options) === 1) {
        // 给复选框添加不可取消勾选的属性
        foreach ($tag['options'] as &$option) {
            $option .= ' checked disabled';
        }
        // 补充同名隐藏字段,避免disabled字段无法提交导致验证失败
        $tag['content'] .= '<input type="hidden" name="' . $tag['name'] . '" value="' . esc_attr($options[0]) . '">';
    }

    return $tag;
}

逻辑说明:单个选项时,复选框会被设为已勾选且无法取消;由于被disabled的复选框不会被表单提交,额外添加的同名隐藏字段会确保该值正常传递到后台,避免必填项验证失败。

将以上代码添加到主题的functions.php文件或自定义插件中即可生效。

内容的提问来源于stack exchange,提问作者Life after Guest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:39:57