我有一个动态的复选框列表,显示在管理区域(user edit.php)的用户配置文件上。用户应该能够选择复选框,将其选择保存为usermeta字段中的数组。很简单。但是,当我在更新用户后加载用户配置文件时,即使选项保存在usermeta字段中,并且复选框的属性为checked=“checked”,也不会选中这些框。
起初,我只是使用一个基本的in\\u array()来检查复选框值是否位于usermeta的数组中。如果是,则我设置checked=“checked”。这起到了作用,并在开发工具中显示为showing checked=“checked”,但仍然没有选中标记。下面是它的样子:
$courseResults = DwgFunctions::get_all_courses();
$userWaivedModules = DwgFunctions::checkCourses(\'scorm_waived_courses\',$user);
foreach($courseResults as $course){
$courseListing.= \'<input type="checkbox" name="waivedCourses[]" value="\'.$course->getCourseId().\'" \'.(in_array($course->getCourseId(),$userWaivedModules)?"checked=\\"checked\\"":"").\'/>\'.$course->getTitle().\'<br />\';
}
读了一些书后,我发现WordPress喜欢让我们使用checked()函数。当然,它只是检查字符串,我需要它来检查数组。所以我使用了在论坛上找到的一个方便的功能,现在有了这个:
$courseResults = DwgFunctions::get_all_courses();
$userWaivedModules = DwgFunctions::checkCourses(\'scorm_waived_courses\',$user);
foreach($courseResults as $course){
$courseListing.= \'<input type="checkbox" name="waivedCourses[]" value="\'.$course->getCourseId().\'" \'.DwgFunctions::dwg_checked($userWaivedModules,$course->getCourseId()).\'/>\'.$course->getTitle().\'<br />\';
}
我的deg\\u checked函数如下所示:
function dwg_checked($haystack, $current){
if(is_array($haystack) && in_array($current, $haystack)) {
$current = $haystack = 1;
}
return checked($haystack, $current);
}
两种方式的结果都是一样的:
<input type="checkbox" name="waivedCourses[]" value="1-555e1f4f86bd2">SC DDSN Family-Arranged Respite - An Overview for Families<br>
<input type="checkbox" name="waivedCourses[]" value="1-555e1f89ae931" checked="checked">Overview for Families - Quiz<br>
<input type="checkbox" name="waivedCourses[]" value="1-555e1f9d1d688" checked="checked">Overview for Families - Quiz<br>
<input type="checkbox" name="waivedCourses[]" value="1-555e20e3079ad" checked="checked">Overview for Families - Quiz<br>
<input type="checkbox" name="waivedCourses[]" value="FamilyModule_FinalQuizc0ea0981-8158-4077-b94a-6d182db566a3">FamilyModule_FinalQuiz<br>
<input type="checkbox" name="waivedCourses[]" value="FAMILYMODULE_QUIZ3ecc3d81-1281-4477-adb8-ac81ef96724a">FAMILYMODULE_QUIZ<br>
<input type="checkbox" name="waivedCourses[]" value="FamilyModule_TheFinalQuizad828150-f6da-4e19-b69c-5a78a74d412a">FamilyModule_FinalQuiz_2<br>
但是,它在屏幕上显示为:
如果我按原样更新用户(有些框显示checked=“checked”,但实际上没有一个框显示复选标记),它将完全清除我的usermeta值。
如果我真的选中了复选框,它将显示复选标记,并且还实现了css for input[类型=复选框]:checked:before,并将设置保存在usermeta中。请注意,动态添加checked属性时,不会实现css before伪类。
input[type=checkbox]:checked:before {
content: \'\\f147\';
margin: -3px 0 0 -4px;
color: #1e8cbe;
}
你知道会发生什么吗?其他地方的复选框工作正常,但它们不使用数组(也不使用checked()函数)