2025/12/27 22:32:44
网站建设
项目流程
公司网站建设宣传公司,一个公司能备案几个网站,黑马程序员教程,有没有做头像的网站下面给出 4 种在 WordPress 里“让不同页面(或不同模板、不同文章类型)调用不同顶部菜单”的常用做法#xff0c;从最轻量到最灵活依次排列。你可以按自己熟悉程度与项目复杂度任选其一#xff0c;也可以组合使用。
一、纯后台设置#xff1a;利用「菜单位置 条件挂钩」(无…下面给出 4 种在 WordPress 里“让不同页面(或不同模板、不同文章类型)调用不同顶部菜单”的常用做法从最轻量到最灵活依次排列。你可以按自己熟悉程度与项目复杂度任选其一也可以组合使用。一、纯后台设置利用「菜单位置 条件挂钩」(无需写代码适合只有 2-3 套菜单的小站点)在「外观 → 菜单」里把菜单 A 设为 primary菜单 B 设为 secondary(多主题可能叫 top / header / mobile 等)。安装插件「Conditional Menus」(免费无设置页)。进入「外观 → 菜单 → Manage Locations」标签页你会看到每个菜单位置右侧多了一个 «Conditional Menu» 下拉框。给 primary 位置先选「菜单 B」点击 « Conditions»在弹窗里勾选– 首页Home– 某分类Category → Products– 某页面Page → Contact保存即可。逻辑插件会在 wp_nav_menu_args 钩子内按你设定的条件实时把菜单 slug 换掉性能影响几乎为 0且升级主题不会丢。二、主题自带「页面级菜单」字段(部分商业主题/页面构建器已集成最直观)编辑页面 → 找到「Page Settings / Theme Options」面板 → 下拉「Custom Header Menu」。选想要的菜单 → 更新。主题作者在 header.php(或相应模板)里已预埋代码大致如下$custom_menu get_post_meta( $post-ID, _custom_top_menu, true ); wp_nav_menu( array( menu $custom_menu ? $custom_custom : primary, container nav, container_class top-nav ) );如果你用的主题没这功能可以自己把上面代码放进 header.php再配合下文「三」的高级做法把 _custom_top_menu 做成下拉选单即可。三、在子主题里用 filter 动态替换(推荐代码量极少、可控、可版本管理)给 functions.php 加一段/** * 根据不同条件返回不同菜单 * param array $args wp_nav_menu 原始参数 * return array */ function my_conditional_nav_menu( $args ) { // 只动 primary 位置其它位置原样返回 if ( primary ! $args[theme_location] ) { return $args; } // 1. 首页单独菜单 if ( is_front_page() ) { $args[menu] home-menu; // 菜单别名(slug) } // 2.「产品」分类及其下属文章 elseif ( is_tax( product_cat ) || is_singular( product ) ) { $args[menu] product-menu; } // 3. ID 为 42 的页面 elseif ( is_page( 42 ) ) { $args[menu] landing-menu; } // 4. 默认 fallback else { $args[menu] primary-menu; } return $args; } add_filter( wp_nav_menu_args, my_conditional_nav_menu );把需要的菜单先建好记下「菜单别名」填到代码里即可。性能只在调用 wp_nav_menu() 时触发一次过滤几乎无额外查询。维护升级主题只要子主题还在就安全;换主题也只需把 ‘primary’ 改成新主题的 location 名称。四、完全自定义新建 Page Template 新 Menu Location (适合「同一站点不同频道」型项目如 官网/B2B/B2C 三合一)注册新菜单位置(functions.php)add_action( after_setup_theme, function () { register_nav_menus( array( primary 主站菜单, corporate 企业频道菜单, shop 商城频道菜单, ) ); } );新建页面模板 template-corporate.php在文件头部声明?php /** * Template Name: 企业频道 */ get_header( corporate ); // 自动加载 header-corporate.php复制一份 header-corporate.php把里面的wp_nav_menu( array( theme_location corporate ) );换成刚注册的 corporate 位置。4. 后台「外观 → 菜单」里给 corporate 位置分配菜单;发布页面时选「企业频道」模板即可。5. 优势每套频道可以有独立的 header/footer/sidebar菜单只是其中一部分;后期还可以配独立样式表与脚本。常见坑 调试技巧缓存用了页面缓存插件(WP Rocket、LiteSpeed Cache)记得把「菜单」从缓存中排除或给不同页面打不同缓存标签。多语言WPML/Polylang 会给每种语言生成独立菜单记得在条件判断里加 ICL_LANGUAGE_CODE 或 pll_current_language()。移动端检查主题是否对「Mobile Menu」另外写了 walker必要时把上面的 filter 同样应用到 mobile 位置。菜单找不到确认填的是「菜单别名」而不是标题;别名在「外观 → 菜单 → 编辑」里展开「菜单设置」可见。一句话总结只想「某几个页面换个菜单」→ 装 Conditional Menus 最快;想代码干净、可 Git 管理 → 用子主题 wp_nav_menu_args filter;要做「多频道」大站 → 注册新菜单位置 多套 header 模板最清晰。照着上面 4 种方案任选其一10 分钟内就能把「不同页面不同顶部菜单」跑通。原文http://wordpress.zj.cn/jiaocheng/48.html