导航菜单角色

贝斯克雷朋

此插件允许您根据用户角色隐藏自定义菜单项。因此,如果你在菜单中有一个链接,你只想向登录用户、某些类型的用户,甚至只想向注销用户显示,那么这个插件就是为你准备的。

导航菜单角色非常灵活。除了标准用户角色之外,您还可以使用导航菜单角色过滤器,然后使用导航菜单角色项可见性筛选以检查您需要的任何条件。您可以检查任何用户元值(如功能)和其他插件添加的任何自定义属性。

重要注意事项

在WordPress中,菜单项和页面是完全独立的实体。导航菜单角色不限制对内容的访问。导航菜单角色是只有用于显示/隐藏导航菜单项目。如果你想限制内容,那么你还需要使用会员插件。

Nutzung公司

  1. 转到外观>菜单
  2. 将“显示模式”设置为“已登录用户”、“已注销用户”或“所有人”。默认设置为“每个人”。
  3. 如果您希望按角色自定义,请将“显示模式”设置为“登录用户”,并在“将菜单项限制为最小角色”下选中所需角色旁边的复选框。请记住,角色并没有将项目严格限制为该角色,而是限制为每个具有该角色能力的人。例如:设置为“Subscriber”的项目将被Subscribers看到由管理员执行。更多地将此视为查看项目所需的最低角色。

支持

支持在WordPress论坛。请注意,支持是有限的,不包括插件的任何自定义实现。发布之前,请阅读常见问题解答此外,请在禁用其他插件并使用默认主题时验证问题。

请将任何错误、警告、代码问题报告给github

屏幕截图

  • 在管理菜单自定义程序中显示菜单项的新选项

安装

  1. 上传插件文件夹到/wp-content/插件/目录
  2. Aktiviere das Plugin mittels dem“Plugins”-WordPress中的Menü
  3. 转到外观>菜单
  4. 相应地编辑菜单项。首先选择是要将项目显示给Everyone、所有已注销用户还是所有已登录用户。
  5. 通过选中要限制可见性的角色旁边的复选框,登录用户可以进一步限制为特定角色。

常见问题解答

我在管理菜单项中看不到导航菜单角色选项?

这可能是因为与另一个插件(或主题)冲突。

从WordPress 5.4开始wp_nav菜单项自定义字段钩子已添加到WordPress核心。

因此,导航菜单角色直接连接到此挂钩,而无需替换自定义的管理菜单查询器,其中可能只有一个。如果Walker被一个主题/插件替换,并且核心钩子没有包含在内,那么导航菜单角色就不能添加它的字段。

已知冲突的完整列表:

  1. UberMenu 2.x Mega Menus插件(UberMenu3.x支持NMR!)
  2. 将后代添加为子菜单项插件
  3. Navception插件
  4. 饱腹主题
  5. Be主题
  6. 伊特门吕
  7. 木星主题
  8. iMedica主题
  9. Proxyler EVO主题
  10. Mega主插件

解决方法#1

沙兹德有一个天才的想法,不等待核心挂钩,只需自己添加挂钩。如果所有插件和主题作者使用相同的钩子,我们可以让我们的插件一起玩。

在WordPress 5.4之前,我使用了这个想法,并将我的管理导航菜单Walker修改为只有添加以下行(就在描述输入之后):

<?php程序//将其放置在管理员导航菜单“Walker”中do_action('wp_nav_menu_item_custom_fields',$item_id,$item,$depth,$args,$id);//末端添加段?>

从WordPress 5.4开始,我不再取代Walker,并建议其他插件和主题也这样做。

但对于那些仍然存在的,它们肯定需要包括now-core钩子。

请您冲突的插件/主题的作者将此代码添加到他们的插件或主题中,我们的插件将变得兼容。

修补插件/主题的说明

如果你想自己尝试这个补丁,你可以修改你冲突的插件/主题的管理菜单Walker类。

提醒:我不支持修复插件/主题。如果您对以下说明不满意,请联系冲突插件/主题的开发人员!

1.找到扩展步行者_导航_菜单。最快的方法是搜索整个插件/主题文件夹扩展Walker_Nav_Menu。当您找到包含此文本的文件时,您将知道需要编辑哪个文件。一旦你找到了,这节课的开头会是这样的:

类YOUR_THEME_CUSTOM_WALKER扩展了WALKER_Nav_Menu{}

2.找到启动()方法

在该文件中,您最终会看到一个类方法,它看起来像:

函数start_el(&$output,$item,$depth=0,$args=array(),$id=0){//为了简洁起见,有些东西被截断了}

3.在这个方法中的某个地方粘贴动作挂钩!

在导航菜单角色中,我将挂钩直接放在描述之后,如下所示:

<p class=“field-description-description description-wide”><label for=“edit-menu-item-description-<?php echo$item_id;?>”><?php_e(“说明”);?><br/><textarea id=“edit-menu-item-description-<?php echo$item_id;?>”class=“widefat edit-menu-item-description”rows=“3”cols=“20”name=“menu-iitem-descrcription[<?php-echo$item_id;?>]”><?php echo esc_html($item->description);//文本区域是否已跳过?></文本区域><span class=“description”><?php_e(“如果当前主题支持,则说明将显示在菜单中。”);?></span></label></p><?php程序//在start_el()方法的描述段落后面直接添加do_action('wp_nav_menu_item_custom_fields',$item_id,$item,$depth,$args,$id);//末端添加段?>

解决方法#2

作为解决方法,您可以切换到默认主题(或禁用冲突的插件),编辑每个菜单项的导航菜单角色,然后恢复到原始主题/重新启用冲突的插件。导航菜单角色的前端功能仍然有效。

解决方法#3

仅适用于低于5.4的WordPress。

下载并安装此微型插件。需要显示NMR选项时激活它,编辑完成后禁用它。

我正在使用XYZ成员插件,但我看不到它的“级别”?

显然有一些会员插件不要使用传统的WordPress角色/功能。我的插件会列出任何以传统WordPress方式注册的角色。如果你的会员插件正在使用其他系统,那么导航菜单角色将无法使用它。从1.3.5开始,我添加了一个名为导航菜单角色项可见性就在我的代码决定是否显示/隐藏菜单项之前。也总是有导航菜单角色过滤器,用于修改管理员中列出的角色。在这两者之间,我相信你有足够的能力将导航菜单角色与任何成员插件集成在一起。

下面是一个示例,我添加了一个新的伪角色,创造性地称为“新角色”。第一个功能将其添加到菜单项管理屏幕中。第二个功能非常通用,实际上不会做任何事情,因为您需要根据正在使用的插件提供自己的逻辑。导航菜单角色将保存新的“角色”信息,并将其添加到$item->角色变量。

现有兼容性插件

  1. 愿望会员
  2. WooCommerce会员资格

如果你的会员插件没有在这里列出,你可以使用上面的桥接插件作为模板。向下滚动到主插件文件的底部,您将看到“Helper Functions”部分。如果您根据成员插件的逻辑修改3个包装器函数,则插件的其余部分应处理与导航菜单角色的集成。

添加新的“角色”

NMR中的角色是可过滤的,与全局角色不同$wp_角色这允许在不使用核心角色来确定访问权限的插件之间添加兼容性,就像一些成员插件一样。

/***将自定义角色添加到导航菜单角色菜单列表*param:$roles所有可用角色的数组,默认为全局$wp_roles*返回:数组*/函数kia_new_roles($个角色){$roles['new-role-key']='new-rule';返回$roles;}add_filter(“导航菜单角色”,“kia_new_roles”);

注意,如果你想添加WordPress功能,以上就是你所需要的。因为导航菜单角色检查角色是否有权使用查看菜单项current_user_can($role)不需要为nav_menu_roles_item_visibility`过滤器。

万一你需要根据一些非常定制的东西来检查您的可见性状态,下面是您的操作方法:

/***更改每个菜单项的可见性*@param bool$可见*@param obj$item完整的菜单对象。导航菜单角色将其信息添加到以下键{*roles-可能值:“in”(全部登录)|“out”(全部注销)|特定角色的数组,例如:[“administrator”,“editor”]*display_mode-可能值:“show”(条件满足时显示)|“hide”(条件符合时隐藏)*返回布尔值*/函数kia_item_visibility($visible,$item){if(isset($item->roles)&&isarray($item->roles)&&inarray('new-role-key',$item->roles)){/*if(//您自己对当前用户和“new-role”状态进行自定义检查){$visible=真;}其他{$visible=假;}*/  }返回$visible;}添加过滤器('nav_menu_roles_item_visibility','kia_item_可见性',10,2);

请注意,您必须生成自己的if/then逻辑。我无法免费支持与其他插件的自定义集成。你可以联系我讨论雇用我,或者我建议使用支持WordPress角色的插件,比如Justin Tadlock的成员.

按字母顺序对角色排序

将以下代码片段添加到主题中函数.php文件:

/**对NMR角色进行排序*@param:$roles ID=>名称的所有可用角色的数组*@return:array*/函数kia_sort_roles($个角色){if(is_admin()){$array_lowercase=数组映射('strtolower',$roles);array_multi-SORT($array_slower、SORT_ASC、SORT_STRING、$roles);返回$roles;}}add_filter(“导航菜单角色”,“kia_sort_roles”);

菜单爆炸了?为什么我的所有页面都显示给注销用户?

如果菜单中的每个项目都配置为显示给登录用户(所有登录用户或按特定角色),则当注销的访问者访问您的站点时,菜单中没有要显示的项目。wp_nav_menu()然后会尝试检查它回退cb参数…默认为wp_页面_菜单.

因此,如果你没有要显示的项目,WordPress最终会显示你的所有页面!!

如果不希望这样,则必须将回退参数设置为空字符串。

wp_nav_menu(数组('theme_location'=>'primary-menu','fallback_cb'=>'');

您必须对的每个受影响的实例执行此操作wp_nav_menu()在主题模板中。我不可能告诉你他们在哪里,但是页眉是主菜单的常见位置。

或者,您可以通过向子主题的函数.php文件或通过代码段插件:

/***禁用所有菜单的回退页菜单**@param array$args wp_nav_menu()参数的数组。*@return数组*/函数kia_nav_menu_args($args){$args['fallback_cb']='';返回$args;}添加过滤器('wp_nav_menu_args','kia_nav_menu_args');

导入/导出时我的菜单角色发生了什么?

导航菜单角色插件存储1条帖子每个菜单项/帖子。默认的“导出”工具可以很好地导出它。

然而,Import插件只为菜单项导入特定的post元。从1.3版开始,我在导航菜单角色中添加了一个自定义导入程序作为解决方案。

如何使用自定义导入程序?

  1. 转到工具>导出,选择导出所有内容并下载导出文件
  2. 转到新站点上的“工具”>“导入”,执行正常的WordPress导入
  3. 返回工具>导入,这次选择导航菜单角色导入程序。
  4. 使用相同的.xml文件并执行第二次导入
  5. 不会创建重复的帖子,但会导入所有菜单帖子元(包括导航菜单角色信息)

导航菜单角色与WPML兼容吗?

是的,但要手动。WPML开发人员告诉我,导航菜单项的元数据是由WPML同步,这意味着复制到新语言中的菜单不会带来其自定义导航菜单角色设置。但是,如果手动重新配置设置,新的语言菜单将按预期工作。

雷森西宁

2024年8月17日
在使用这个插件之前,我尝试了其他一些插件。在开始之前,我对我想要的UI有了一个想法,直到这一次,才有了它。这个插件有正确的UI来做我需要的事情。
13.2022年10月
一个有用的插件,与精心设计的菜单配合使用,解决了很多问题。
Alle 215雷森森·莱森

Mitwirkende&Entwickler公司

“导航菜单角色”是Open-Source-Software。Folgende Menschen haben an diesem Plugin mitgewirkt:

米特威肯德

“导航菜单角色”出现在20个Sprachenübersetzt.Danke anu bersetzerinnen和u bersetzir之死福里赫·米特维尔孔。

u bersetze deine Sprache中的“导航菜单角色”。

干预Entwicklung?

杜氏密码,sieh dir das公司SVN仓库阿伯尼埃尔的一个订单恩特威克隆普洛托科尔RSS(RSS).

阿尔·安德伦斯波托科尔

2.1.3

  • 修复:RTL布局样式。

2.1.2

  • 修复:打字。

2.1.1

  • 修复:隐藏父菜单项的隐藏子菜单项的顶级显示。

2.1.0

  • 新增:添加对按角色“隐藏”菜单项的支持。

2.0.2

  • 修复:PHP致命错误:未捕获错误:调用未定义的方法WP_Customize_Manager::settings_previewed()。settings_previewed()在WordPress 3.9.0+之前不存在。

2.0.1

  • 调整:按字母顺序对角色名称进行排序。

2.0.0

  • 新增:定制支持!道具@westonruter!

1.10.2

  • 修复:导航菜单类的严格数组类型转换。

1.10.1

  • 修复:仅在前端自动应用类。防止在每次保存时追加重复的类。

1.10.0

  • 修正:我的钩子进了WP5.4的核心!!终于可以停止覆盖管理菜单Walker了。

1.9.5

  • 修复:PHP注意:未定义变量$item

1.9.4

  • 将NMR角色作为css类添加到菜单输出中
  • 通过使列表项全宽,改进菜单编辑器角色复选框列表UX。道具@lkraav

1.9.3

  • 访问前请检查所有对象属性是否存在。解决自定义菜单项的PHP通知。

1.9.2

  • 包括一个!empty()检查菜单$items
  • 更新捐赠链接

1.9.1

  • 更新捐赠链接
  • 需要更新并根据版本进行测试

1.9.0

  • 添加对多站点的支持。道具@open dsi和@fiech。

1.8.5

  • WP4.7使用新Walker

1.8.4

  • 当应排除自定义程序中编辑的导航菜单项时,阻止其呈现

1.8.3

  • 删除不推荐使用的screen_icon()

1.8.2

  • 减少传递给的参数数量添加操作链接滤波器

1.8.1

  • 切换输入名称以使用计数器[nav-menu-role][100][1]。由于某些原因,[nav-menu-role][100][]没有发布数组,而被炒作的名称[nav-menu-role][100][镀金]对保存例程造成了严重破坏。不应影响任何不使用连字符角色名称的人。

1.8.0

  • 修复WordPress 4.5中的样式问题

1.7.9

  • 将walker的优先级恢复为默认值,因为主题实际上并没有使用钩子来添加自己的字段。悲伤的脸。

1.7.8

  • 删除所有管理通知

1.7.7

  • 添加花哨的调试消息

1.7.6

  • 调整CSS以最初隐藏新添加菜单项上的复选框(默认为“Everyone”,这样角色就不会出现)

1.7.5

  • 更新Walker_Nav_Menu_Edit_Roles以模仿WordPress 4.4中的Walker_Nov_Menu

1.7.4

  • 更改metabox中的语言,尝试解释最小大写与严格角色检查
  • 继续调整常见问题

1.7.3

  • 更新自述文件,更新错误通知,添加更多FAQ链接

1.7.2

  • 添加意大利语。道具@sododesign

1.7.1

  • 更新了常见问题及冲突插件/主题的补丁说明
  • 添加葡萄牙语。道具@brunobaros

1.7.0

  • 调整管理UI,使其更加用户友好。现在的选项有:向所有人显示、向注销用户显示和向登录用户显示(可选地,按特定角色登录用户)

1.6.5

  • 添加瓜哈拉蒂语。道具@rohilmisty93

1.6.4

  • 更多语言问题->同步svn+git版本号

1.6.3

  • 请再次尝试添加语言。他们都去哪里了?

1.6.2

  • 添加法语翻译。Philippe Gilles的道具

1.6.1

  • 更新合并列表
  • 如果没有角色,则不显示单选按钮–允许精细的权限控制

1.6.0

  • 功能:隐藏父菜单项将自动隐藏其所有子菜单项
  • 功能:添加与菜单项可见性控制插件和任何愿意通过wp_nav菜单项自定义字段挂钩。请参阅常见问题解答使我们的插件兼容。

1.5.1

  • 希望修复缺失的nav-menu-roles.min.js SVN问题

1.5.0

  • 切换到插件实例
  • 检测到冲突插件时添加通知
  • 删除一些无关参数
  • 借助@deskarrada添加西班牙语翻译

1.4.1

  • 更新到Walker_Nav_Menu_Edit的WP 3.8版本(当然与3.7.1没有任何不同)
  • 对管理菜单项进行小的CSS调整
  • 对照WP 3.8检查

1.4

  • 添加到常见问题解答
  • 将JS风格添加到管理菜单项
  • 更新至Walker_Nav_Menu_Edit的WP 3.7.1版本

1.3.5

  • 添加nav_menu_roles_item_visibility过滤器以处理不使用传统角色的插件

1.3.4

  • 感谢@hassanhamm更新管理员语言
  • 感谢@hassanhamm添加阿拉伯语翻译

1.3.3

  • 修复Nav_Menu_Roles_Import not found错误

1.3.2

  • 愚蠢的注释错误导致保存问题

1.3.1

  • SVN无法包含导入程序文件!

1.3

  • 添加自定义导入程序

1.2

  • 由于Evan Stein@vanpop,主题的主要修复是使用他们自己的定制Walkerhttp://vanpop.com/
  • 菜单项不是定制的导航器,而是通过wp_get_nav_menu_items过滤器控制的
  • 删除自定义导航器代码

1.1.1

  • 修复到插件网站的链接
  • 修复admin Walker中的标签

1.1

  • 清除调试消息

1

  • Erstveröffentlichung公司