设为首页收藏本站

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 493|回复: 0

如何创建WordPress自定义用户角色和功能的简单指南

[复制链接]

307

主题

0

回帖

925

积分

高级会员

积分
925
发表于 2023-12-26 10:57:04 | 显示全部楼层 |阅读模式
关于如何创建WordPress自定义用户角色和能力的简单指南     Rebecca Ohanes 2020年12月10日WordPress 17分钟阅读     

创建WordPress自定义用户角色和能力你一定会经历选择的痛苦。你会被无尽的机会搞得晕头转向。基本上,您可能不知道应该创建哪些角色和能力,以及如何最好地结合它们。这就是为什么我们在这里告诉您为什么需要自定义用户角色和功能,在分配角色和功能时应该考虑什么,最后但同样重要的是,如何创建它们。但是在我们深入研究之前,让我们先了解一下WordPress自定义用户角色是关于什么的。对于初学者来说,分配多个用户角色可以让你与其他用户分担网站管理的负担。同时,它给这些用户单独的访问你的网站,这意味着他们不需要使用你的登录凭证。这提高了您的网站的安全性。

WordPress提供了一组预定义的6个用户角色。这是你的超级管理员,他基本上是你的傀儡主人,因为他可以为用户分配能力。然后是管理员、编辑器、作者、贡献者和订阅者。这些角色并不是一成不变的。如果您愿意,可以删除它们并添加新的。

这些角色都有默认能力。例如,如果你是一个作者,你将被分配用户角色“作者”,你将有能力执行编写和编辑自己的帖子的任务。当然,就像用户角色一样,如果您愿意,您可以编辑功能。为什么我们需要自定义用户角色和功能?如何创建和自定义用户角色和功能faq是否可以为WordPress用户分配多个用户角色?我可以使用功能检查来确保插件的安全性吗?如何将WordPress用户角色代码转换为WP短代码?

1。为什么我们需要定制用户角色和功能?     



我们首先假设很多网站不是由一个人而是由来自不同部门的几个人管理的。当然,你不会给他们所有的权限,让他们对网站做任何他们想做的事,对吧?特别是如果他们对所有的技术方面都毫无头绪的话。它们最终只会造成更多的伤害而不是好处。这就是为什么您需要仔细管理谁可以访问网站以及访问目的是什么。

用户能力决定了用户访问的目的。因此,对于任何操作,都有我们必须确保用户拥有的定义的功能集。例如,WordPress中的每个功能都与特定的操作相关联。这个动作可以指修改某些过程和特性,也可以指只查看WordPress管理区或前端的某些页面。WordPress提供超过70种默认的用户功能。让我们来看看WordPress提供的一些预定义功能,以更好地描绘一幅图画。create_sites upload_plugins create_users edit-plugins moderate_comments edit_others_posts publish_posts edit_publish_posts edit_posts delete_posts read

因此,正如已经解释的,这些能力被分配给用户角色。每个角色都有一系列附加的能力,这些能力也决定了用户可以执行的操作的能力。让我们看看预先设置的用户角色及其默认功能(请记住,这是针对多站点WP的。超级管理员Admin Editor Author Contributor Subscriber create_sites, upload_plugins create_users edit_plugins moderate_comments edit_others_posts publish_posts edit_publish_posts edit_posts delete_posts read

当我们从超级管理员到订阅用户时,用户角色的能力变得越来越少。例如,编辑器可以调节评论,编辑其他rs的帖子,发布帖子,编辑自己发布的帖子,而作者只能做后者。分配能力本质上是排他性的。

这里的主要关注点是理解如何决定用户是否应该具有某种能力。为此,插件/主题开发人员必须理解应用程序的业务逻辑以及WP用户角色和功能的内部逻辑。除此之外,最终的插件/主题应用逻辑应该是直观的、合理的,并且与一般的WP用户体验一致,并且应该遵循最小特权原则。最小权限原则(POLP)是计算机安全中的一个重要概念,它是将用户的访问权限限制为执行其工作所需的最低权限的实践。在POLP下,用户只被授予读、写或执行他们完成工作所需的文件或资源的权限:换句话说,是所需的最少的权限。简而言之,在分配功能时一定要有限制,否则最终可能会损害安全性。为了描绘一个清晰的画面,这里有两个例子:例子#1

你有一个画廊插件。如何知道某个用户是否应该能够创建新的图库?首先,我们应该创建{pluginprefix}_create_gallery功能。然后,我们必须考虑最合理和最直观的方法,即将图库创建功能与特定的WP标准功能(如创建帖子)联系起来。这意味着我们只允许允许创建帖子的用户创建图库。默认情况下,具有标准WP角色的用户,即超级管理员、管理员、编辑器和作者,都可以执行此操作。但是,您的应用程序逻辑可能略有不同,您可以决定只有admin才能创建图库。另一个例子是当你的网站拥有某些交易数据时。执行事务的用户应该能够查看其详细信息。然而,站点管理员不应该能够了解这些数据。另一方面,出于审计目的可能需要一个额外的角色,这意味着另一个用户必须有权访问数据。应用程序的业务逻辑应该考虑到功能的WP标准角色,定义功能的分配。既然每个人都了解了自定义用户角色和功能的目的,让我们进入下一个步骤:2。如何创建和自定义用户角色和功能

创建自定义用户角色有两种方法。有手动方法和插件方法。但是,别担心,我们会给你看两个,让你自己决定哪一个最适合你。这将是短暂而无痛的!让我们从更简单的选项开始——通过插件创建自定义用户角色。几乎所有东西都有一个插件,管理用户功能也不例外。和其他功能一样,这个功能也有各种各样的插件提供它们的服务,以添加、编辑和删除用户角色和功能。这是一个WordPress提供的插件,叫做用户角色编辑器插件。当然,需要做的第一件事是安装和激活插件。之后,只需转到左侧面板,然后选择Users,然后选择User Role Editor。您将得到一长串可以管理的功能列表。

  

现在,如果您看一看页面的顶部,您会发现一个写着“选择角色”并更改其功能的部分。在那里您将发现已经存在的角色。您可以选择其中一个角色,选中Granted Only框以查看其功能,并在必要时编辑它们。如果您不知道应该将哪些能力分配给哪些角色,下面的概述可以刷新您的记忆。

   “k一旦控制了功能概述,就可以继续添加或删除功能了。例如,您可以从左侧面板中选择一个组并添加一个新功能。因此,假设您希望允许Editor创建用户(这不是Editor的默认功能)。你只需要选择Users组,然后create_users。现在,只需单击Update,您选择的用户角色就可以开始了。



  

顺便说一下,您可以选择以“人类可读的形式”向您显示功能,还是以已弃用的容量显示功能——这取决于您更容易管理哪一种。现在,您知道了如何编辑现有用户角色的功能。但是如果您想添加一个新的用户角色呢?这很简单,你只需要在你的右边面板上选择Add Role。在这里,您可以为用户提供一个显示角色名和一个已弃用的角色名。在“复制”下,选择新角色所基于的现有角色。这将节省大量时间,因为您不必亲自挑选每一个功能。如果你不想使用插件,你当然可以选择使用手动方法。使用WordPress,您可以删除所有预定义的用户角色,并根据您的需要创建自定义角色。尽管如此,我们不建议删除用户角色。最好保留标准角色,并添加具有功能的自定义角色,或者向标准角色添加自定义功能。你甚至可以两者都做。但总而言之,我们建议您扩展您的用户角色和功能,而不是删除标准的角色和功能。

以下是您需要熟悉的5个函数,它们是不言自明的: add_role():用于添加自定义角色。Remove_role():删除自定义角色。Add_cap():向角色添加自定义能力。Remove_cap():从角色中删除自定义能力。Get_role():通知角色及其功能。

首先,让我们看看如何删除默认用户角色。     



只要转到你的WordPress管理员页面,选择左边栏的外观,然后是编辑器。在右侧,选择Theme Functions。现在,假设您想要删除Editor和Author角色;你所要做的就是添加remove_role()函数(即remove_role(\“ editor \“);remove_role(\“ author \“))移到主题函数文件的末尾。然后单击“更新文件”。我们必须再次警告你,你不应该删除WordPress标准角色,因为它会破坏WordPress和许多插件的一些标准功能。我们只是为了理解的目的来演示这个过程是如何工作的。现在,在了解了如何删除用户角色之后,让我们看看如何创建新角色。     



在我们的示例中,我们将添加一个自定义的用户角色,即Chief Editor。当然,我们将为此使用add_role()函数。但我们还将添加以下语法: add_role($role, $display_name, $capabilities);和插件版本一样,我们需要选择一个角色名(例如,chief_editor)和一个显示名(例如,Chief Editor)。但是,当然,这还不够,您还需要添加功能。为此,我们将再次把功能概述留在这里,以供您在需要时浏览。



下面是我们的示例函数在添加所有功能后的样子:“主编”),阵列(\“edit_users\“ => true, //允许用户编辑其他用户\“create_users\“ => true, //允许用户创建新用户\“edit_others_posts\“ => true, //允许用户也编辑其他的帖子\“publish_posts\“ => true, //允许用户发布帖子\“manage_categories\“ => true, //允许用户管理邮件类别));   

完成此操作后,可以将新的自定义用户角色分配给用户。为此,转到左侧面板并选择Users,然后选择All Users。选择一个用户,然后选择添加的角色,单击Change。3。faq

   是否可以为WordPress用户分配多个用户角色?当然,你可以使用插件来帮助你,比如多重角色。另外,你也可以使用下面的代码:

$someone = new WP_User($user_id);人- > add_role(“role-1”);人- > add_role(“role-2”);请记住,即使你的代码允许分配多个角色,你的WordPress管理员UI不允许。换句话说,如果您再次使用WordPress Admin UI保存一个用户,所有其他额外的角色将消失,只有角色下拉列表中的角色将保留。这就是为什么我们不建议创建多个角色的原因。相反,您可以向用户角色添加新的必要功能,或者创建自定义用户角色,该用户角色具有来自两个不同角色的所需功能组合。我可以使用功能检查来确保插件的安全性吗?是的,你可以,你应该!特别是如果你的插件允许用户提交数据,它应该使用功能检查。基本上,您是通过权限系统添加安全层,该系统为用户分配用户角色,并为每个用户分配执行特定操作的权限。所以,当构建一个插件时,你必须只在当前用户具备所需能力时才运行你的代码。下面是一个没有能力检查的活动(在本例中是清除帖子):

/***根据主页url生成一个删除链接。** @param string $content现有内容。** @return |空字符串* /函数wporg_generate_delete_link($content) {//只对单个发布页面运行。如果(is_single () & & in_the_loop () & & is_main_query ()) {//添加查询参数:action, post。url = add_query_arg(美元[\“行动\“ = > \“ wporg_frontend_delete \“,\“文章\“ = > get_the_ID (),), home_url ()); 返回内容。\“ ”。esc_html__(\“Delete Post\“, \“wporg\“)。\“ < / > \“;} 返回null;} /***请求处理程序* /函数wporg_delete_post () {如果(收取($ _GET[\“行动\“])& &“wporg_frontend_delete”= = = $ _GET[\“行动\“]){ //验证我们有一个post id。$post_id = (isset($_GET[\“post\“])) ?($_GET[\“post\“]): (null); //验证是否有这样一个编号的帖子。$post = get_post((int) $post_id);If(空($post)) {返回;} //删除帖子。wp_trash_post ($ post_id); //重定向到管理页面。$redirect = admin_url(\“edit.php\“);wp_safe_redirect(重定向); //完成。死;}} /***添加删除链接到发布内容的末尾。* /Add_filter (\“the_content\“, \“wporg_generate_delete_link\“); /***用init钩子注册我们的请求处理程序。* /Add_action (\“init\“, \“wporg_delete_post\“);

允许每个人删除帖子。如果您想避免这样的灾难,可以看看如何限制功能:/***根据主页url生成一个删除链接。** @param string $content现有内容。** @return |空字符串* /函数wporg_generate_delete_link($content) {//只对单个发布页面运行。如果(is_single () & & in_the_loop () & & is_main_query ()) {//添加查询参数:action, post。url = add_query_arg(美元[\“行动\“ = > \“ wporg_frontend_delete \“,\“文章\“ = > get_the_ID (),), home_url ()); 返回内容。\“ ”。esc_html__(\“Delete Post\“, \“wporg\“)。\“ < / > \“;} 返回null;} /***请求处理程序* /函数wporg_delete_post () {如果(收取($ _GET[\“行动\“])& &“wporg_frontend_delete”= = = $ _GET[\“行动\“]){ //验证我们有一个post id。$post_id = (isset($_GET[\“post\“])) ?($_GET[\“post\“]): (null); //验证是否有这样一个编号的帖子。$post = get_post((int) $post_id);If(空($post)) {返回;} //删除帖子。wp_trash_post ($ post_id); //重定向到管理页面。$redirect = admin_url(\“edit.php\“);wp_safe_redirect(重定向); //完成。死;}} If (current_user_can(\“edit_others_posts\“)) {/***添加删除链接到发布内容的末尾。* /Add_filter (\“the_content\“, \“wporg_generate_delete_link\“); /***用init钩子注册我们的请求处理程序。* /Add_action (\“init\“, \“wporg_delete_post\“);}

也就是说,检查功能是不够的,因为它所做的只是确保只有有能力删除帖子的用户才能删除帖子。但有些情况下,有人可以通过欺骗让你点击启动删除帖子的链接。这就是为什么您还需要Nonce安全检查。Nonce是一个只使用一次的任意或半任意数字。它的作用是为你的url和表单增加一层保护层,并降低黑客企图的风险。一旦你用一个nonce键强制一个URL,就会有一个验证检查。这将确保执行URL的用户也打算执行特定的操作。

有关Nonces以及如何创建它们的更多信息,请参阅本文。如何在短代码中检查WordPress用户角色?假设你需要检查一个用户是否被允许查看某一内容,你是这样做的:$ user = wp_get_current_user ();user_role = att美元(的作用);美元allowed_roles = [];array_push (allowed_roles, user_role美元); If (is_user_logged_in() && array_intersect($allowed_roles, $user->roles)) {返回$内容;其他}{返回”;} }Add_shortcode (\“check-user-role\“, \“func_check_user_role\“);最后,你的短代码看起来像这样: [check-user-role role=“subscriber“]

您已经准备好创建自己的自定义用户角色了吗?还是还有一些未回答的问题?如果是后者,请留言,我们很乐意帮助您!你喜欢这篇文章吗?传播这个词!留言取消回复

您的电子邮件地址将不会被公布。必填字段标记为*

您的电子邮件地址将永远不会被发布或共享。必填字段标记为*

COMMENT*

NAME *

EMAIL ADDRESS *

WEBSITE

在此浏览器中保存我的姓名、电子邮件和网站,以便下次评论时使用。



相关帖子6个最佳WordPress迁移插件比较(2022)如何用6个简单步骤保护WordPress网站最佳社交Feed插件为你的WordPress网站如何选择值得信任的插件# Plugins # WordPress
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|跨境圈导航 ( 粤ICP备19025394号 )

GMT+8, 2024-12-5 03:41 , Processed in 0.057174 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表