我有一个两级分类术语复选框列表(使用get\\u categories创建),将值存储到usermeta表中。我想在刷新页面时显示选中的项目。
这是不使用复选标记刷新的原始代码:
$categories = get_categories( $args );
foreach ( $categories as $category ){
echo \'<label><input type="checkbox" id="type-\'. $category->name . \'" value="\'. $category->name . \'" class="shopping" name="top_level[]" <?php checked(\'. $category->name . \', in_array(top_level[])) ?>>\'. $category->name . \'</label>\';
在阅读了许多帖子后,我想到了这个:
<input type="checkbox" id="type-\'. $category->name . \'" value="\'. $category->name . \'" class="shopping" name="top_level[]" <?php checked(\'. $category->name . \', top_level[]) ?>>
这样做的唯一一件事是在术语前面显示一个额外的>。检查Firebug中的元素可以显示以下内容:
<input type="checkbox" id="type-Fashion" value="Fashion" class="shopping" name="top_level[]" <?php= checked(fashion, top_level[]) ?="">
如果我在Firebug中编辑HTML,它会显示:
<input type="checkbox" id="type-Fashion" value="Fashion" class="shopping" name="top_level[]" <?php="" checked(fashion,="" top_level[])="" ?="">
已尝试添加
in_array
:
<input type="checkbox" id="type-\'. $category->name . \'" value="\'. $category->name . \'" class="shopping" name="top_level[]" <?php checked(\'. $category->name . \', in_array(top_level[])) ?>>
同样,Firebug只显示PHP代码。
我做错了什么?如何将该值与数组中的某个值进行比较?
提前感谢!
UPDATE 更新用户配置文件后,仍不显示复选标记。
var\\u dump显示$current数组的正确值,这些值在db中序列化。
这是我的最新尝试:
$categories = get_categories( $args );
$current = get_user_meta($user->ID, \'top_level\', false);
$currentsel = maybe_unserialize( $current );
foreach ( $categories as $category ){
?>
<label><input type="checkbox" id="type-<?php echo $category->name; ?>" value="<?php echo $category->name; ?>" class="shopping" name="top_level[]" <?php if(in_array($category->name, $currentsel)){ echo \'checked="checked"\';} ?>><?php echo $category->name; ?> </label>
<?php
虽然这篇文章已经有6年的历史了,我也不确定checked函数是否仍然可以这样工作:
<p>
<input class="checkbox" type="checkbox" <?php checked( (bool) $instance[\'do_something\'], true ); ?> id="<?php echo $this->get_field_id( \'do_something\' ); ?>" name="<?php echo $this->get_field_name( \'do_something\' ); ?>" />
<label for="<?php echo $this->get_field_id( \'do_something\' ); ?>"><?php _e(\'Display the Do Something action?\'); ?></label>
这篇文章说:“键是checked()函数中的(bool)。如果它不存在,复选框将无法正确维护视觉复选标记。”
尝试了以下方法:
<label><input type="checkbox" id="type-<?php echo $category->name; ?>" value="<?php echo $category->name; ?>" class="shopping" name="top_level[]" <?php checked((bool)$category->name, $current); ?>><?php echo $category->name; ?> </label>
我完全不知道下一步该怎么办。