使用CHECKED函数对照数组验证值

时间:2015-11-19 作者:1td

我有一个两级分类术语复选框列表(使用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>
我完全不知道下一步该怎么办。

1 个回复
SO网友:WPTC-Troop

好的,试试下面的

    $current = get_user_meta($user_id, \'continent\', $true);
    $categories = get_categories( $args );

    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 checked($category->name, $current);  ?>><?php echo $category->name; ?> </label>
  <?php  
    }
如果$current = get_user_meta($user_id, \'continent\', $true); 值是array 然后尝试以下方法UPDATED 对于阵列

    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, $current)){ echo \'checked="checked"\';}  ?>><?php echo $category->name; ?> </label>
  <?php  
    }
从你的评论中,我看到你使用了这个<?php checked(\'. $category->name . \', $current, false); ?> false不应该存在,因为它不会回显选中的字符串,而是返回选中的字符串。

相关推荐

Dropdown menu for categories

当我使用下面的代码时<?php wp_nav_menu( array(\'menu\' => \'categories\' )); ?> 我可以创建一个新的菜单来列出我创建的wordpress中的所有类别。我用它在页面中间列出所有类别。我现在的问题是:有没有一种简单的方法可以为存在的每个子类别创建下拉菜单?那么,当我点击一个特定的类别时,它的子类别会显示出来吗?