WordPress设置登陆用户和未登陆用户显示不同菜单
日期:
标签:WordPress教程
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务: 点此联系我
文章目录
目前大多数WordPress主题都支持在后台 - 外观 - 菜单中设置网站的菜单,而且可以创建多个菜单,给各个菜单单独设置菜单项。
目前有这样的需求:网站头部有一个导航菜单,想在这个位置给登录和未登录用户分别显示不同的菜单项,该如何实现呢?WordPress给我们提供了wp_nav_menu_args这个filter,可以在菜单显示之前更改wp_nav_menu函数的参数。具体我们可以这样实现:
1、创建两个菜单
先进入WordPress后台 - 外观 - 菜单中, 创建两个菜单,菜单名称分别设置成:已登录 和 未登录,并给这两个菜单分配不同的菜单项。
不懂设置的,可以参考视频教程:WordPress创建菜单
2、确定菜单位置名称
开始下一步前,我们需要知道菜单位置名称,也就是theme_location参数的值,用文本编辑器打开当前主题目录中的header.php,搜索wp_nav_menu一般都能找到这个值,代码一般长这样:
// theme_location后面的 top 就是我们要找的值
wp_nav_menu( array( 'theme_location' => 'top', 'menu_id' => 'top-menu') );
如果你实在不懂代码,具体可以看视频教程提供的简便方法:确定菜单位置名称
3、添加执行代码
最后,在当前主题的functions.php添加以下代码即可:
function ludou_nav_menu_args($args = '') {
// 下面的top改成第2步获取到的菜单位置名称
if ($args['theme_location'] == 'top') {
if (is_user_logged_in()) {
$args['menu'] = '已登录';
}
else {
$args['menu'] = '未登录';
}
}
return $args;
}
add_filter('wp_nav_menu_args', 'ludou_nav_menu_args');
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-show-different-menu-for-logged-in-users-and-users-not-logged-in.html
不错的方法的了,值得顶一下。。。。
不错的了,值得顶一下了。。
都是通过 is_user_logged_in() 来硬判断的~~
@龙笑天 有什么可以软判断?
@露兜 额,好像也只能这个函数~
@龙笑天 啥叫软的???
@云落 没有软的,只有这个硬的~
博主你好:想请问一下文中你贴的代码是用什么插件生成的?
@门前清风 prism.js
求你10年写的wordpress 博客主页随机文章的 4.8版本更新版 ,10年那个我用了不行!!谢谢你了
我的邮箱在上面
这个功能对于不少的站点还是很实用的,简单修改一下就有了新功能。非常不错的教程。
请教大神,我想让我的wordpress博客,在关闭首页时打开另外一个网站,怎么实现啊?和退弹意思差不多,只限关闭首页时,关闭内页不打开新网址
感谢露兜大大,我也想问一个关于菜单的问题
我在wordpress大学里面看到一篇获取24小时内发布文章数量的文章
下面是链接
https://www.wpdaxue.com/count-posts-or-custom-post-types-from-last-24-hours-or-from-today.html
我想将这个发布文章的数量显示在导航菜单中,应该如何实现呢?
感谢!
站长,我测试了你的这个代码,没有生效。没反应。
@hootown 检查一下菜单名称和菜单位置是否正确
学习了!
露兜哥您好,首先感谢下您的教程,通过您的教程我一个不会PHP的人也写了一款主题~另外想请教下,我想实现个记录登录时间的功能,网上的代码是这样的
// 记录登录时间
function user_last_login($user_login) {
global $user_ID;
$user = get_user_by( 'login', $user_login );
update_user_meta($user->ID, 'last_login', date('Y-m-d H:i:s'));
}
add_action('wp_login','user_last_login');
这个只有在每次登录的时候会记录时间,有的时候WP是默认登陆的,这种情况如何解决呢?
@Shawn 记录登陆信息后,登陆信息是保存到浏览器的cookie中的,WordPress会直接读取浏览器cookie来判断用户是否登陆。这种情况并不经过WordPress后台处理,所以记住登陆状态的情况下,你没法判断用户的哪次操作是登陆的。可以提供两种思路:1、禁止用户记住登陆信息,关闭浏览器后再次打开需要重新登陆;2、用户每打开一个页面就记录一下时间,最近一次打开页面的时间可以当作他登陆的时间。
@露兜 好的,非常感谢!我感觉我需要的就是第二种思路!再次感谢!(~o ̄3 ̄)~
@露兜 第二种不错~
@Shawn 嗨!好巧,在这个网站能学到很多关于wordpress的知识,真的很不错
@w候人兮猗 滑稽脸:)
露兜兄,我刚开始学习,读你的教程很有长进。
选了个主题是storefront。一步一步模仿你的教程。
这个主题只有三个菜单位置:1)Primary Menu 2) Secondary Menu 3) Handheld Menu 可以替换“top”;而且“已登录”和“未登录”不能挤在同一个菜单位置。
比如说:“已登录”占据了Primary Menu菜单位置 ,那么“未登录”只能占据空白菜单位置或者 Secondary Menu菜单位置 和Handheld Menu 菜单位置,于是按照教程,用”Primary Menu “替换“top”以后,无法显示“未登录”菜单。
请教该怎么做?
@德林 不需要在后台指定 已登录 或 未登录 给Primary Menu,程序会根据登陆状态自动自定。
只需要替换代码中的两处top为Primary Menu即可,另外请确保第2步中,theme_location值的正确性!
@露兜 回复的真快。赞美你的勤劳!
摁错键盘发表了。
还是不能,太晚了没敢惊扰你。
但你给了我方法,继续折腾,实在绕不过再麻烦你。谢谢!
好复杂 新手表示看不懂
对于我这样的新手,很有指导意义
学习了,不错,对于新手不错的学习
不错实现了
很细致
又碰到问题
描述:规定全厂职工用户名六位字符串,前二位是车间类别,要求不同车间的职工使用不同的菜单。
比如:
用户名为‘hf0278’的职工登录时,只能显示“后方车间”的专用菜单‘hfmenu’;
用户名为‘jd3047’的职工登录时,只能显示“机动车间”的专用菜单‘jdmenu’;
判断
if ($args['theme_location'] == 'primary') {
if (is_user_logged_in()) {
if (substr($current_user->user_login,0,2)=='jd'{//判断机动车间
$args['menu'] = 'jdmenu';
}
}
else {
$args['menu'] = 'mymenu';
}
}
报错:The site is experiencing technical difficulties.
(hfmenu’、 'jdmenu'和 'mymenu'都已经事先设置完毕)
这个方法的确不错,但我这里有一个更简单的办法,直接加代码就行了,不需要查看菜单位置名称。
https://www.npc.ink/6799.html