以编程方式更改角色信息;编辑角色名称并删除

时间:2012-11-02 作者:JamesG

我在制作系统时,使用Wordpress将许多功能委托给系统的前端。我已经列出了所有角色(大多数自定义角色),并且需要登录用户能够编辑或删除角色的名称。

我找不到任何正常的WP函数来做这件事,也找不到允许我需要的简单解决方案的插件,所以我想我可能需要运行MYSQL查询来更改信息,但是。。您是否看到了包含用户角色信息的wp_选项表??这是一个巨大的混乱,我真的不想破坏这个系统。

有什么建议吗?

提前谢谢。

3 个回复
最合适的回答,由SO网友:Adam 整理而成

有一整套专门用于此目的的功能;

http://codex.wordpress.org/Function_Reference#User_and_Author_Functions

特别感兴趣的(但不限于)是,

add_cap
add_role
get_role
map_meta_cap
remove_cap
remove_role
以及许多其他与用户相关的功能,这些功能将允许您根据您的用例场景等来验证/验证其权限。

正在查看wp-includes/capabilities.php 您可以看到,role\\u名称保存在一个数组中,因此,

add_action(\'init\', \'update_role_name\');
function update_role_name(){
    global $wp_roles;
    $wp_roles->roles[\'subscriber\'][\'name\'] = \'member\'; 
    $wp_roles->role_names[\'subscriber\'] = \'member\'; 
}
可能需要一些调整,因为这还没有经过测试。

编辑:

我刚刚发现:is-there-way-to-rename-user-role-name-without-plugin - 看看吧。实际上与我的建议完全相同,只是实例化类并检查变量$wp_roles 实际定义/设置。我会假设它的工作基础是它的标记正确,但很自然,请对此进行测试以确认。

但以类似的方式查看以下直接取自core安装文件的内容wp-includes/capabilities.php 第133行,

/**
 * Add role name with capabilities to list.
 *
 * Updates the list of roles, if the role doesn\'t already exist.
 *
 * The capabilities are defined in the following format `array( \'read\' => true );`
 * To explicitly deny a role a capability you set the value for that capability to false.
 *
 * @since 2.0.0
 * @access public
 *
 * @param string $role Role name.
 * @param string $display_name Role display name.
 * @param array $capabilities List of role capabilities in the above format.
 * @return null|WP_Role WP_Role object if role is added, null if already exists.
 */
function add_role( $role, $display_name, $capabilities = array() ) {
    if ( isset( $this->roles[$role] ) )
        return;

    $this->roles[$role] = array(
        \'name\' => $display_name,
        \'capabilities\' => $capabilities
        );
    if ( $this->use_db )
        update_option( $this->role_key, $this->roles );
    $this->role_objects[$role] = new WP_Role( $role, $capabilities );
    $this->role_names[$role] = $display_name;
    return $this->role_objects[$role];
}
。。。我们可以看到,

如果角色不存在,则更新角色列表。

add_role( $role, $display_name, $capabilities = array() ) 
。。。因此,更新现有角色的$display\\u name参数将具有相同的预期效果,而无需实际修改角色本身,以保留其与角色关联的用户。

SO网友:Mridul Aggarwal

Don\'t work with that mess

打开文件“wp includes/capabilities.php”

内部有3个类“WP\\U角色”、“WP\\U角色”&;“WP\\U用户”

这3个类能够轻松处理与用户角色相关的所有功能;能力

SO网友:Geert

如果您正在寻找插件,您应该尝试Members plugin 贾斯汀·塔洛克。它包含一个简单明了的角色管理器。

我强烈建议您也看看代码。Justin的代码确实是一流的,与许多其他WP插件相比,这是一种真正的乐趣。

Role managerEdit role

结束

相关推荐

Mysqldump add drop table?

我注意到在Codex中显示了用于备份数据库的--add drop table选项。在我搞砸之前,这是否意味着在最终导入备份时,如果目标数据库中存在这些表,它们将被覆盖?我不想在备份桌子时把它们弄掉!user@linux:~/files/blog> mysqldump --add-drop-table -h mysqlhostserver -u mysqlusername -p databasename (tablename tablename tablename) | bzip2