如何在选中复选框并将其保存在数据库中后使其保持标记状态

时间:2021-09-14 作者:Victor Sokoliuk

我创建了一个简单的插件。有一个选项页面,在该页面上显示所有现有用户角色。代码如下:

 <h2>Select user roles to send notifications:</h2>
 <?php
   global $wp_roles;
   $roles = $wp_roles->get_names();
   foreach($roles as $role) { $i++; ?>

    <div class="role-wrapper">
    <input name="role[]" type="checkbox" id="user_role-<?php echo $i; ?>" value="<?php echo $role;?>">
    <label for="user_role-<?php echo $i; ?>"><?php echo $role;?></label>
    </div>

 <?php } ?>
管理员在复选框中标记必要的角色并单击提交按钮后,所选角色将保存到数据库中。

  if(!empty($_POST[\'role\'])) {
     $new_user_roles = array();
     foreach($_POST[\'role\'] as $key=>$value){
         $new_user_roles[$key] = $value;
     }
     update_option(\'choosed_users_role\', $new_user_roles);
   }
然后一切都会正常运转。但是,我不知道如何显示选定的复选框。刷新页面后,您无法看到选中了哪些复选框。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

您可以使用get_option() 要检索保存在数据库中的选定角色,请使用checked() 在您的复选框中。例如。

// In your code, after this line:
$roles = $wp_roles->get_names();

// Add this which retrieves and stores the selected role(s):
$selected_roles = (array) get_option( \'choosed_users_role\' );

/* And then in your <input>, use checked() with in_array():
<input name="role[]" type="checkbox" id="user_role-<?php echo $i; ?>" value="<?php echo $role;?>"
  <?php checked( in_array( $role, $selected_roles ) ); ?>>
*/
<如果使用settings API 要创建选项页,无需手动调用update_option() 保存所选角色。

  • $i 从未在代码中声明,因此应在foreach 开始。

  • WP_Roles::get_names() 返回具有角色slug和名称对的关联数组,例如。\'administrator\' => \'Administrator\'\'foo_role\' => \'Foo Role\', 所以我建议你保存角色slug,而不是名字。

    我会用wp_roles() 像这样:$roles = wp_roles()->get_names(), 这意味着您不需要访问全局$wp_roles 变量

  • 相关推荐