Nav Menu Roles – WordPress plugin WordPress插件下载

点击下载

导航菜单角色

插件描述

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

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

重要提示

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

用法

转到外观>菜单将“显示模式”设置为“登录用户”,“注销用户”或“所有人”。 “Everyone”是默认设置。如果您希望按角色进行自定义,请将“显示模式”设置为“登录用户”,然后在“将菜单项限制为最小角色”下,选中所需角色旁边的框。

请记住,角色不会严格限制该项目的角色,而是限制具有该角色能力的每个人。 例如:订阅者将由管理员显示设置为“订阅者”的项目。将此视为查看项目所需的最小角色。 支持

支持在

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

请将错误,错误,警告,代码问题报告给

Github

屏幕截图

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

安装

插件文件夹上载到 / wp-content / plugins / directory通过WordPressGo中的'Plugins'菜单到Appearance>激活插件。 Menus相应地编辑菜单项。首先选择是否要将项目显示给Everyone,所有已注销的用户或所有已登录的用户。通过选中您要限制可见性的角色旁边的框,可以将登录用户进一步限制为特定角色。 常见问题

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

这是因为你有另一个插件(或主题),它也试图改变在admin中创建Menu部分的相同代码。

WordPress在管理员的这个区域没有足够的钩子,直到他们做插件被强制通过自定义管理菜单Walker替换所有东西,其中只有一个。这是一个

trac票,但已经有一段时间了。

已知冲突的非详尽列表: UberMenu 2.x Mega Menus插件(UberMenu 3.x支持NMR!)将后代添加为子菜单项pluginNavception pluginSuffusion themeBeThemeYith MenuJupiter ThemeiMedica themeProstyler EVO themeMega主要插件解决方法#1

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

因此,从版本1.6开始,我将管理导航菜单Walker修改为

添加以下行(在描述输入后面):

&lt ;?php //将其放在您的管理导航菜单中Walkerdo_action('wp_nav_menu_item_custom_fields',$ item_id,$ item,$ depth,$ args); // end added section?>   

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

如果您希望自己尝试此修补程序,可以修改冲突的插件/主题的管理菜单Walker类。

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

1.找到扩展

Walker_Nav_Menu 的类。最快的方法是在整个插件/主题文件夹中搜索 extends Walker_Nav_Menu 。当您找到包含此文本的文件时,您将知道需要编辑哪个文件。一旦你在这里找到它就是那个类的开头:

类YOUR_THEME_CUSTOM_WALKER扩展Walker_Nav_Menu {}   

2.找到

start_el()方法

在该文件中,您最终会看到一个类方法,如下所示:

 function start_el(& $ output,$ item,$ depth = 0,$ args = array(),$ id = 0){//为了简洁而截断的一些东西}   

3.将我的动作钩子粘贴到thi的某个地方方法!

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

< p class =“field-description description description-wide”> < label for =“edit-menu-item-description-<?php echo $ item_id;?>”> <?php _e('Description'); ?>< br /> < textarea id =“edit-menu-item-description-<?php echo $ item_id;?>” class =“widefat edit-menu-item-description”rows =“3”cols =“20”name =“menu-item-description [<?php echo $ item_id;?>]”><?php echo esc_html($ item-> description); // textarea_escaped?>< / textarea> < span class =“description”><?php _e('如果当前主题支持,说明将显示在菜单中。'); ?>< /跨度> < / label>< / p><?php //在start_el()methoddo_action('wp_nav_menu_item_custom_fields',$ item_id,$ item,$ depth,$ args)的描述段落之后直接添加; //结束添加部分?>  解决方法#2 

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

解决方法#3

点击下载并安装此

小插件。当您需要显示NMR选项时激活它,然后在完成编辑后将其禁用。 我正在使用XYZ Membership插件而我看不到它的“级别”?

显然有一些会员插件

不使用传统的WordPress角色/功能。我的插件将列出以传统WordPress方式注册的任何角色。如果您的会员插件使用其他系统,则导航菜单角色将无法使用它开箱即用。从1.3.5开始,我添加了一个名为 nav_menu的过滤器_roles_item_visibility 就在我的代码决定是否显示/隐藏菜单项之前。还有 nav_menu_roles 过滤器,它允许您修改管理员中列出的角色。在这两者之间,我相信你已经足够将Nav Menu Roles与任何会员插件集成在一起。

这是一个例子,我添加了一个新的伪角色,创造性地称为“新角色”。第一个函数将其添加到菜单项管理屏幕。第二个功能非常通用,实际上不会做任何事情,因为你需要根据你使用的插件提供自己的逻辑。导航菜单角色将保存新的“角色”信息,并将其添加到数组中的项目到

$ item-> roles 变量。 添加新的“角色”

NMR中的角色是可过滤的,与全局

$ wp_roles 不同。这允许在不使用核心角色来确定访问的插件之间添加兼容性,就像某些成员资格插件一样。

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

注意,如果你想添加一个WordPress功能,上面几乎就是你所需要的。由于Nav Menu Roles检查角色是否有权使用

current_user_can($ role)查看菜单项,因此您无需为 nav_menu_roles_item_visibility`过滤器设置自定义回调。

如果您

需要根据非常自定义的内容检查您的可见性状态,请按以下步骤进行操作:

 / * *更改每个菜单项的可见性* param:$ visible boolean * param:$ item对象,完整的菜单对象。导航菜单角色将其信息添加到$ item->角色* $ item->角色可以是“in”(全部登录),“out”(全部注销)或特定角色数组*返回布尔值* / function kia_item_visibility($ visible,$ item){if(isset($ item-> roles)&& is_array($ item-> roles)&& in_array('new-role-key',$ item - > roles)){/ * if(//您自己对当前用户的自定义检查与'new-role'状态){$ visible = true; } else {$ visible = false; } * /} return $ visible;} add_filter('nav_menu_roles_item_visibility','kia_item_visibility',10,2);   

请注意,您必须生成自己的if / then逻辑。我无法为与其他插件的自定义集成提供免费支持。您可以

与我联系讨论雇用我,或者我建议使用支持WordPress角色的插件,例如Justin Tadlock的成员现有兼容性插件

Wishlists成员资格 WooCommerce成员资格 如果此处未列出您的会员插件,您可以使用上述桥接插件作为模板。向下滚动到主插件文件的底部,您将看到“助手功能”部分。如果根据您的成员资格插件的逻辑修改3个包装函数,插件的其余部分应该处理与Nav Menu Roles的集成。

按字母顺序对角色进行排序

将以下代码段添加到主题的

functions.php 文件中:

 / * *对NMR角色进行排序* @param:$ roles ID =>所有可用角色的数组名称* @return:array * / function kia_sort_roles($ roles){if(is_admin()){$ array_lowercase = array_map('strtolower',$ roles); array_multisort($ array_lowercase,SORT_ASC,SORT_STRING,$ roles);返回$角色; add_filter('nav_menu_roles','kia_sort_roles');  菜单爆炸了吗?为什么我的所有页面都显示给已注销的用户? 

如果菜单中的每个项目都配置为显示给登录用户(所有登录用户或特定角色),则当注销的访问者访问您的站点时,菜单中不会显示任何项目。然后

wp_nav_menu()将尝试检查其 fallback_cb 参数...默认为 wp_page_menu

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

如果您不想这样,则必须将fallback参数设置为空字符串。

 wp_nav_menu(array('theme_location'=>'primary-menu','fallback_cb'=>''));  我的菜单角色在导入/导出时发生了什么变化? 

导航菜单角色插件将1条帖子

存储到每个菜单项/帖子。默认导出工具可以很好地导出它。

但是,导入插件仅导入菜单项的某些post meta。从版本1.3开始,我为Nav Menu Roles添加了一个自定义导入器作为解决方法。

如何使用自定义导入程序?转到工具>导出,选择导出所有内容并下载导出文件转到工具>导入新网站并执行正常的WordPress导入返回工具>导入,这次选择导航菜单角色导入器。使用相同的.xml文件并执行第二次导入不会创建重复的帖子,但所有菜单发布元(包括导航菜单角色信息)都将导入导航菜单角色与WPML兼容?

是的,但是手动。 WPML开发人员告诉我,导航菜单项的元数据是

而不是由WPML同步,这意味着复制到新语言的菜单不会带来他们的自定义导航菜单角色设置。但是,如果手动重新配置设置,新语言菜单将按预期工作。

评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注