wordpress登陆前登陆后显示不同的顶部菜单

在WordPress中让“未登录”和“已登录”用户看到不同的顶部菜单,最干净、最安全、最可维护的做法是:

在同一个菜单位置(themelocation)里,根据is_user_logged_in()动态切换菜单。

下面给出三种常见实现方式,按推荐程度排序。任选其一即可,不要混用。

方案一:在主题或子主题里用filter切换(推荐)

为你的顶部菜单在主题里注册一个菜单位置(如果还没注册):

// functions.php
add_action( 'after_setup_theme', function () {register_nav_menus( ['primary' => __( '顶部菜单', 'your-textdomain' ),] );
} );

用wp_nav_menu_args过滤器在渲染前判断是否登录,并替换菜单:

// functions.php
add_filter( 'wp_nav_menu_args', function ( $args ) {// 只针对前端、只针对我们关心的菜单位置if ( ! is_admin() && 'primary' === $args['theme_location'] ) {// 未登录时显示哪个菜单$guest_menu = get_term_by( 'slug', 'guest-menu', 'nav_menu' ); // 也可以用 id// 已登录时显示哪个菜单$user_menu  = get_term_by( 'slug', 'user-menu',  'nav_menu' );if ( ! is_user_logged_in() && $guest_menu ) {$args['menu'] = $guest_menu->term_id;} elseif ( is_user_logged_in() && $user_menu ) {$args['menu'] = $user_menu->term_id;}}return $args;
} );

在后台“外观→菜单”里分别建好两个菜单,并记录它们的别名(slug)或ID,对应到上面的$guest_menu、$user_menu即可。

注意:这两个菜单都不要勾选任何菜单位置,完全由代码接管。

模板里照常调用:

wp_nav_menu( [ 'theme_location' => 'primary' ] );

优点

不依赖插件,逻辑集中,可版本控制。

菜单本身仍由WordPress管理,客户日后改菜单不用改代码。

方案二:用同一个菜单+条件标签隐藏/显示条目

如果你两个菜单80%都一样,只是个别条目不同,可以只建一个菜单,然后:

在“外观→菜单”给需要隐藏的条目加CSS类:

未登录条目加hide-logged-in,已登录条目加hide-logged-out。

在主题额外输出一段CSS:

add_action( 'wp_head', function () {if ( is_user_logged_in() ) {echo '<style>.hide-logged-in{display:none!important}</style>';} else {echo '<style>.hide-logged-out{display:none!important}</style>';}
} );

优点:只有一个菜单,维护简单。

缺点:条目其实仍在HTML里,只是display:none,安全性/SEO略差。

方案三:用插件(不想写代码时)

“ConditionalMenus”

“UserMenus”

安装后可在菜单位置里给不同角色/登录状态指派不同菜单。

缺点:多一个插件,代码控制权低。

常见坑

缓存插件/全页缓存

如果站点启用了全页缓存(WPSuperCache、WPRocket、CloudflareAPO等),需要把登录cookie设为不缓存或者缓存分用户组,否则访客会相互看到对方的菜单。

WPRocket:开启“为登录用户单独缓存”。

Cloudflare:用BypassCacheonCookie规则匹配wordpress_logged_in_*。

使用了页面构建器(Elementor、Bricks等)

这些构建器往往用自己的Nav组件,需要在其设置里找“Visibility”或“DisplayCondition”,把上述条件标签is_user_logged_in()填进去即可。

一句话总结

最推荐方案一:注册一个菜单位置,用wp_nav_menu_args过滤器根据is_user_logged_in()把$args[‘menu’]换成不同的菜单ID。

原文

http://www.dulizhan.bj.cn/wordpress/239.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91699.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【昇腾推理PaddleOCR】生产级部署方式

已知的在昇腾上推理Paddle OCR有三种方法&#xff1a; 概要&#xff1a; PyTorch官方提供了昇腾插件包&#xff0c;安装后虽然可以支持PytorchOCR和PaddlePaddle的推理任务&#xff0c;但性能较低。换句话说&#xff0c;PaddlePaddle框架层面支持了昇腾&#xff0c;但具体到某个…

LangChain摘要记忆组件的使用与解析

01. 摘要记忆组件的类型 在 LangChain 中使用缓冲记忆组件要不就保存所有信息&#xff08;占用过多容量&#xff09;&#xff0c;要不就保留最近的记忆信息&#xff08;丢失太多重要信息&#xff09;&#xff0c;那么有没有一种情况是既要又要呢&#xff1f; 所以折中方案就出…

NAT与智能选路

1、NAT 基础概念核心作用&#xff1a;私网地址无法在 Internet 上直接使用和分配&#xff0c;NAT 通过将私有地址与公有地址及端口进行转换&#xff0c;实现私网与公网的通信。转换示例&#xff1a;内网用户&#xff08;10.1.1.1&#xff09;访问外网 FTP Server&#xff08;12…

【05】VisionMaster入门到精通——圆查找

文章目录1 运行参数先检测出多个边缘点然后拟合成圆形&#xff0c;可用于圆的定位与测量 1 运行参数 先检测出多个边缘点然后拟合成圆形&#xff0c;可用于圆的定位与测量——运行参数 扇环半径——圆环ROI的内外圆半经&#xff1b; 边绿类型 最强——只检测扫描范围内梯度最…

p5.js 用 beginGeometry () 和 endGeometry () 打造自定义 3D 模型

点赞 关注 收藏 学会了 在 p5.js 的 3D 绘图中&#xff0c;这两个函数是一对 “黄金搭档”&#xff1a; beginGeometry()&#xff1a;像一个 “3D 模型的开关”&#xff0c;调用它之后&#xff0c;你画的所有简单 3D 形状&#xff08;比如球体、圆锥&#xff09;都会被 “…

(9)NMPC非线性模型预测控制及机械臂ROS控制器实现

前言 本篇介绍Nonlinear Model Predictive Control&#xff0c;非线性模型预测控制&#xff0c;MPC是一种现代先进的控制方法&#xff0c;而NMPC特指对非线性模型的控制&#xff0c;其核心思想是在每个控制周期内利用系统的非线性模型及损失函数&#xff0c;预测未来一段时间内…

达梦数据库备份与还原终极指南:从基础到增量策略实战

第一部分&#xff1a;备份与还原核心原理 一、备份还原本质解析数据存储机制 数据存储在物理文件页中&#xff08;最小单位4K-32K&#xff09;有效数据页 文件描述页 已分配使用页日志优先原则&#xff1a;操作先写REDO日志再更新数据文件三大核心操作操作作用关键特性备份复…

设计模式篇:在前端,我们如何“重构”观察者、策略和装饰器模式

设计模式篇&#xff1a;在前端&#xff0c;我们如何“重构”观察者、策略和装饰器模式 引子&#xff1a;代码里“似曾相识”的场景 作为开发者&#xff0c;我们总会遇到一些“似曾相识”的场景&#xff1a; “当这个数据变化时&#xff0c;我需要通知其他好几个地方都更新一…

Node.js 服务可以实现哪些功能

以下是 Node.js 服务可以实现的 100 个功能&#xff0c;涵盖 Web 开发、工具链、系统集成、自动化等方向&#xff0c;按类别分类整理&#xff1a;一、Web 开发相关 RESTful API 服务GraphQL 服务实时聊天应用&#xff08;WebSocket/Socket.IO&#xff09;博客/CMS 系统电子商务…

如何安装和使用 Cursor AI 编辑器

在软件开发领域&#xff0c;几乎每天都有新工具涌现&#xff0c;找到最适合您工作流程的工具可能会改变游戏规则。Cursor 是一款 AI 驱动的代码编辑器&#xff0c;其革命性的 API 管理插件 EchoAPI 就是其中的代表。它们强强联手&#xff0c;承诺在一个强大的平台内简化您的编码…

LangChain框架概念及简单的使用案例

一、LangChain介绍LangChain是一个强大的用于开发大模型应用程序的框架&#xff0c;为开发提供丰富的工具和组件&#xff0c;使得构造复杂的自然语言处理变得更加高效和便捷。它允许开发者将大语言模型与其他数据源工具集成&#xff0c;从而创建出能处理各种任务的智能体应用&a…

安卓audio 架构解析

audio_port_handle_t • 定义&#xff1a;audio_port_handle_t标识音频设备&#xff08;如扬声器、耳机&#xff09;或虚拟端口&#xff08;如远程 submix&#xff09;。它在设备连接或策略路由时由AudioPolicyManager分配&#xff0c;例如通过setDeviceConnectionState()动态注…

GitHub 上 Star 数量前 8 的开源 MCP 项目

原文链接&#xff1a;https://www.nocobase.com/cn/blog/github-open-source-mcp-projects。 MCP 这个词真正被广泛提起&#xff0c;是在 2025 年年初&#xff0c;尤其是在 AI 工具开发圈。3 月&#xff0c;一场围绕 “MCP 是否能成为未来标准协议” 的争论彻底点燃了讨论热度…

【数据结构与算法】数据结构初阶:排序内容加餐(二)——文件归并排序思路详解(附代码实现)

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 &#x1f349;学习方向&#xff1a;C/C方向 ⭐️人生格言&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为…

Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程

MAVROS2目前不是官方提供的标准&#xff0c;主要区别还是通信机制的不同&#xff0c;以及API接口的区别&#xff0c;在使用的过程中&#xff0c;根据对应的版本安装即可&#xff0c;此处进提供简易的二进制安装方法&#xff0c;源码安装暂不提供&#xff0c;前去使用mavros即可…

Ubuntu 安装 ns-3 教程

Ubuntu 安装 ns-3最全 教程 1. 环境更新 sudo apt update sudo apt install git2. Ns3 最低依赖要求 2.1 安装依赖 安装依赖网址&#xff1a;根据自己安装的版本安装对应依赖。 https://www.nsnam.org/wiki/Installation Ubuntu/Debian/Mint 以下软件包列表在 Ubuntu 22.…

《林景媚与命运解放者》

《林景媚与命运解放者》——当数据库成为命运的主宰&#xff0c;谁将成为人类自由意志的解放者&#xff1f;《林景媚数据库宇宙》系列第十二部第一章&#xff1a;解放者的召唤公元 2098 年&#xff0c;随着“命运终结者”的威胁被解除&#xff0c;PostgreSQL Quantum Engine&am…

linux编译基础知识-头文件标准路径

&#x1f4c2; ​​1. 系统路径结构差异​​ 要查看 GCC 的默认头文件搜索路径&#xff0c;可通过以下方法操作&#xff08;以 Linux 环境为例&#xff09;&#xff1a; ​​1. 查看 C 语言头文件路径​​ gcc -v -E -xc - < /dev/null 2>&1 | grep -A 100 "#in…

离线语音芯片有哪些品牌和型号?

离线语音芯片的品牌有很多&#xff0c;型号也有很多&#xff0c;因为离线语音芯片的市场很大&#xff0c;几乎所有的想要语音控制的产品都可以通过增加一颗离线语音芯片来实现语音控制的能力&#xff0c;今天主要提到的就是离线语音芯片品牌厂家之一的唯创知音。唯创知音发展历…

Linux 软件包管理

Linux 软件包管理 分析 RPM 包 Linux 发行版本以 RHEL 为代表的发行版本&#xff0c;使用rpm包管理系统&#xff1a; RHEL (Red Hat Enterprise Linux&#xff09;Fedora&#xff08;由原来的RedHat桌面版本发展而来&#xff0c;免费版本&#xff09;CentOS&#xff08;RHEL的…