1. <div id="11111"></div>

    1. <div id="11111"></div>

      1. <div id="11111"></div>

        WordPress设置登陆用户和未登陆用户显示不同菜单

        日期: 标签:WordPress教程 32 条留言
        如需帮忙改代码,或者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」创作共享协议,转载请标注以下信息:
        原文出处:露兜博客 http://www.szeverich.net.cn/wordpress-show-different-menu-for-logged-in-users-and-users-not-logged-in.html
        露兜
        kaapass@outlook.com  QQ 825533758

        业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

        32 条留言

        点此留言
        1. 代理记账

          不错的方法的了,值得顶一下。。。。

        2. 上海网站建设

          不错的了,值得顶一下了。。

        3. 龙笑天

          都是通过 is_user_logged_in() 来硬判断的~~

        4. 门前清风

          博主你好:想请问一下文中你贴的代码是用什么插件生成的?

        5. 博主你好

          求你10年写的wordpress 博客主页随机文章的 4.8版本更新版 ,10年那个我用了不行??!谢谢你了
          我的邮箱在上面

        6. 我爱贝

          这个功能对于不少的站点还是很实用的,简单修改一下就有了新功能。非常不错的教程。

        7. 小飞侠

          请教大神,我想让我的wordpress博客,在关闭首页时打开另外一个网站,怎么实现???和退弹意思差不多,只限关闭首页时,关闭内页不打开新网址

        8. afr

          感谢露兜大大,我也想问一个关于菜单的问题
          我在wordpress大学里面看到一篇获取24小时内发布文章数量的文章
          下面是链接
          https://www.wpdaxue.com/count-posts-or-custom-post-types-from-last-24-hours-or-from-today.html
          我想将这个发布文章的数量显示在导航菜单中,应该如何实现呢?
          感谢!

        9. hootown

          站长,我测试了你的这个代码,没有生效。没反应。

          • 露兜

            @hootown 检查一下菜单名称和菜单位置是否正确

        10. 迷路7

          学习了!

        11. Shawn

          露兜哥您好,首先感谢下您的教程,通过您的教程我一个不会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后台处理,所以记住登陆状态的情况下,你没法判断用户的哪次操作是登陆的??梢蕴峁┝街炙悸罚?、禁止用户记住登陆信息,关闭浏览器后再次打开需要重新登陆;2、用户每打开一个页面就记录一下时间,最近一次打开页面的时间可以当作他登陆的时间。

            • Shawn

              @露兜 好的,非常感谢!我感觉我需要的就是第二种思路!再次感谢!(~o ̄3 ̄)~

            • 龙笑天

              @露兜 第二种不错~

          • w候人兮猗

            @Shawn 嗨!好巧,在这个网站能学到很多关于wordpress的知识,真的很不错

        12. 德林

          露兜兄,我刚开始学习,读你的教程很有长进。
          选了个主题是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值的正确性!

            • 德林

              @露兜 回复的真快。赞美你的勤劳!

        13. 德林

          摁错键盘发表了。
          还是不能,太晚了没敢惊扰你。
          但你给了我方法,继续折腾,实在绕不过再麻烦你。谢谢!

        14. 初夏

          好复杂 新手表示看不懂

        15. h3cse

          对于我这样的新手,很有指导意义

        16. SKY8G

          学习了,不错,对于新手不错的学习

        17. ppsb1066

          不错实现了

        18. 蛛蛛

          很细致

        19. 德林

          又碰到问题
          描述:规定全厂职工用户名六位字符串,前二位是车间类别,要求不同车间的职工使用不同的菜单。
          比如:
          用户名为‘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'都已经事先设置完毕)

        发表留言

        可以挣钱的游戏 621| 804| 159| 108| 202| 191| 377| 222| 790| 911| 985| 48| 184| 260| 178| 918| 187| 271| 486| 491| 234| 680| 810| 53| 513| 730| 414| 244| 100| 410| 449| 542| 990| 781| 15| 997|