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

LearnDash插件:如何限制多选题的可选答案数量?

解决LearnDash多选题可选数量限制的方案

Hey there! I’ve tackled this exact requirement for LearnDash multiple-choice questions a few times, so here are practical solutions to make this work:

一、第三方附加组件(无需代码)

如果不想折腾代码,这是最省心的方式:

  • LearnDash Custom Question Types Add-on:这个第三方扩展插件专门增强了LearnDash的问题类型,其中就包含支持选择数量限制的多选题功能。你可以在每个多选题的设置面板里直接指定最多可选的选项数,选满后剩余选项会自动置灰禁用,完全可视化配置,适合非开发者用户。

二、自定义代码方案(灵活定制)

如果需要更个性化的控制,或者不想额外安装插件,可以用前端JS+后端验证的组合方案:

1. 前端JS实现选项禁用逻辑

这段jQuery代码会监听多选题的选择状态,当选中数量达到上限时,自动禁用未选中的选项并置灰:

jQuery(document).ready(function($) {
    // 可根据需求修改最大选择数
    const MAX_ALLOWED_SELECTIONS = 3;

    // 监听所有LearnDash多选题的复选框变化
    $('.ld-multiple-choice .ld-checkbox').on('change', function() {
        const $questionContainer = $(this).closest('.ld-question-item');
        const selectedCount = $questionContainer.find('.ld-checkbox:checked').length;

        if (selectedCount >= MAX_ALLOWED_SELECTIONS) {
            // 禁用未选中的选项并添加置灰样式
            $questionContainer.find('.ld-checkbox:not(:checked)')
                .prop('disabled', true)
                .closest('.ld-option-item')
                .addClass('ld-disabled-option');
        } else {
            // 恢复所有选项的可用状态
            $questionContainer.find('.ld-checkbox')
                .prop('disabled', false)
                .closest('.ld-option-item')
                .removeClass('ld-disabled-option');
        }
    });
});

添加方式:你可以通过WordPress的自定义HTML模块、主题的functions.php(用wp_enqueue_script钩子加载),或者用类似"Custom CSS & JS"的插件将这段代码添加到前端。

2. 配套CSS优化禁用样式

为了让禁用的选项更直观,添加以下CSS:

.ld-disabled-option {
    opacity: 0.6;
    pointer-events: none;
    cursor: not-allowed;
}
.ld-disabled-option .ld-checkbox-label {
    color: #999;
}

3. 后端验证(防止前端作弊)

前端逻辑可以被绕过,所以必须加后端验证确保用户提交的答案符合数量限制:

add_action('learndash_mark_question_completed', 'ld_validate_max_multiselect_selections', 10, 3);
function ld_validate_max_multiselect_selections($question_data, $user_id, $quiz_id) {
    // 只针对多选题类型
    if ($question_data['question_type'] !== 'multiple_choice') {
        return $question_data;
    }

    // 设置允许的最大选择数,可根据题目ID单独配置(比如针对特定题目设置不同上限)
    $max_selections = 3;
    $user_selected = isset($question_data['user_answer']) ? $question_data['user_answer'] : [];

    // 如果选中数量超过限制,标记答案无效并给出提示
    if (count($user_selected) > $max_selections) {
        $question_data['correct'] = false;
        $question_data['feedback'] = '你选择的选项数量超出了允许的最大数量,请重新作答。';
        // 可选:清空用户提交的答案
        $question_data['user_answer'] = [];
    }

    return $question_data;
}

添加方式:将这段代码添加到你的主题或子主题的functions.php文件中,或者用代码片段插件(如Code Snippets)来管理。

注意事项

  • 测试时要确保你的LearnDash版本和主题的DOM结构和代码中的选择器匹配,如果LearnDash更新后DOM变化,可能需要调整JS中的选择器。
  • 如果用插件方案,要确认插件和当前WordPress、LearnDash版本兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:12:33