如何为用户角色添加功能?


14

我正在管理Wordpress网络,并想将unfiltered_html用户功能添加到已经预定义的Admin用户角色中。在Wordpress的标准安装中,管理员帐户已经具有此功能,但在MU安装中,只有超级管理员才具有此功能。WordPress的角色和能力

如何在主题或插件中增加管理员角色?


1
wordpress.org/extend/plugins/unfiltered-mu看起来可能有所帮助。但是它适用于管理员和编辑者。如果不希望这样,可以对代码进行一些调整?
Rev. Voodoo


@Rev。伏都教感谢您的建议。这有助于阐明该主题,因为添加unfiltered_html功能不足以允许除Admin或Super admin以外的其他角色发布嵌入等。关键是取消过滤/钩连Wordpress的KSES:kses_remove_filters()
Jonnybojangles 2011年

详细博客:goo.gl/xNuafH
Suresh Kamrushi

Answers:


14

您可以使用WP_Role类,

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

因此,要解决有关如何使管理员能够将SCRIPT和IFRAME标签输入到帖子内容中的原始问题,您正在寻找“ unfiltered_html”功能,在Multisite中该功能仅授予超级管理员。

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

或者您可以在函数中运行一次:

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));

谢谢菲利普。关于WP_Role类应何时执行代码?我猜这会影响全局角色对象吗?我很高兴您提出第二段代码,其中提到我可以在函数文件中运行一次。我在一些Wordpress支持论坛上找到了类似的解决方案,但是我发现在主题或插件中运行一次代码很奇怪。尤其是在没有检查更改是否已存在的情况下。也许角色写作实际上可以忽略不计。如第一个示例所示,要检查功能vs只是将功能写入角色。
Jonnybojangles 2011年

如果您有时间告诉我们,我也对如何执行WP_Role类感兴趣。谢谢
Osu

1
@Jonnybojagles和@Osu,请查看以下内容:角色和功能终极指南garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities
Philip

我已经按照自己的意愿阅读了该文章,但是我确实借此机会再次阅读了这篇文章,谢谢!最终,在解剖了未过滤的mu(Voodoo牧师在上文中提到)插件之后,我最终发现仅通过添加功能来更改角色是不够的。我需要取消过滤Wordpress的KSES过滤器。
Jonnybojangles 2011年

我更喜欢在数组的最后一个元素中添加一个逗号。尽管这似乎无关紧要,因为它既不必使代码正常工作也不会导致错误,但在可视化修改时使用版本控制时,它很方便。您不会看到数组项的旧行被删除,重新添加并突出显示为新行,并且对该行进行添加或更改时仅用逗号表示。尽管数量很少,但有助于在分析修改时节省大量时间。
nyedidikeke '17

2

为了允许除超级管理员或管理员(取决于Wordpress安装是否为网络/ MU实例)以外的其他角色将未过滤的html添加到帖子或评论中,必须删除Wordpress的KSES过滤器。

检查用户是否具有特定功能。

if ( current_user_can( 'unfiltered_html' ) ) {  }

如果是这样,则删除KSES

kses_remove_filters();

此功能已经包装在未过滤的亩中,允许管理员和编辑者添加未过滤的html。


该功能还包装在插件注册和注销中,因此不需要在每个WP实例上执行逻辑。
Jonnybojangles
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.